පයිතන් සැරසිලි කරුවන් සමඟ ආරම්භ කරමු.
පයිතන් සැරසිලි කරුවෙකු යනු දැනටමත් අර්ථ දක්වා ඇති ශ්රිතයකට අමතර ක්රියාකාරීත්වයන් කිහිපයක් එකතු කිරීමට උපකාරී වන ශ්රිතයකි.
පයිතන්හි සෑම දෙයක්ම වස්තුවකි. පයිතන් හි කාර්යයන් පළමු පන්තියේ වස්තූන් වන අතර එයින් අදහස් කරන්නේ ඒවා විචල්යයකින් යොමු කළ හැකි බවත්, ලැයිස්තු වලට එකතු කළ හැකි බවත්, වෙනත් ශ්රිතයක් සඳහා තර්ක ලෙස සම්මත කළ හැකි බවත් ය.
පහත කේත ස්නිපටය සලකා බලන්න.
def decorator_func(fun):
def wrapper_func():
print("Wrapper function started")
fun()
print("Given function decorated")
# Wrapper function add something to the passed function and decorator
# returns the wrapper function
return wrapper_func
def say_bye():
print("bye!!")
say_bye = decorator_func(say_bye)
say_bye()
# Output:
# Wrapper function started
# bye
# Given function decorated
මෙහිදී අපට කිව හැක්කේ සැරසිලි ශ්රිතය අපගේ say_hello ශ්රිතය වෙනස් කර එහි අමතර කේත පේළි කිහිපයක් එක් කළ බවයි.
සැරසිලි සඳහා පයිතන් සින්ටැක්ස්
def decorator_func(fun):
def wrapper_func():
print("Wrapper function started")
fun()
print("Given function decorated")
# Wrapper function add something to the passed function and decorator
# returns the wrapper function
return wrapper_func
@decorator_func
def say_bye():
print("bye!!")
say_bye()
සිද්ධි සිද්ධියකට වඩා සියල්ල නිගමනය කරමු, නමුත් ඊට පෙර අපි සමහර ඕප් ප්රින්සිපල් ගැන කතා කරමු.
දත්ත සංවර්ධනය කිරීමේ මූලධර්මය සහතික කිරීම සඳහා බොහෝ වස්තු දිශානත ක්රමලේඛන භාෂාවල භාවිතා කරන්නන් සහ සැකසුම් භාවිතා කරනු ලැබේ (මෙම දත්ත මත ක්රියාත්මක වන ක්රම සමඟ දත්ත එකතු කිරීම ලෙස සැලකේ.)
මෙම ක්රම ඇත්ත වශයෙන්ම දත්ත ලබා ගැනීම සඳහා ලබා ගන්නා තැනැත්තා සහ දත්ත වෙනස් කිරීම සඳහා වන සැකසුම වේ.
මෙම මූලධර්මයට අනුව, පන්තියක ගුණාංග වෙනත් කේත වලින් සැඟවීමට සහ ආරක්ෂා කිරීමට පුද්ගලික කර ඇත.
ඔව්, rop ප්රොපර්ටි යනු මූලික වශයෙන් ගෙටර්ස් සහ සෙටර් භාවිතා කිරීමට පයිතොනික් ක්රමයකි.
පයිතන්ට දේපල නමින් විශිෂ්ට සංකල්පයක් ඇති අතර එමඟින් වස්තු-නැඹුරු ක්රමලේඛකයෙකුගේ ජීවිතය වඩාත් සරල කරයි.
සෙල්සියස් අංශක උෂ්ණත්වය ගබඩා කළ හැකි පන්තියක් සෑදීමට ඔබ තීරණය කළ බව අපි උපකල්පනය කරමු.
class Celsius:
def __init__(self, temperature = 0):
self.set_temperature(temperature)
def to_fahrenheit(self):
return (self.get_temperature() * 1.8) + 32
def get_temperature(self):
return self._temperature
def set_temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
self._temperature = value
ප්රතිනිර්මාණය කළ කේතය, දේපල සමඟ අපට එය සාක්ෂාත් කරගත හැකි ආකාරය මෙන්න.
පයිතන්හිදී, දේපල () යනු දේපල වස්තුවක් නිර්මාණය කර ආපසු ලබා දෙන ගොඩනංවන ලද ශ්රිතයකි.
දේපල වස්තුවකට ක්රම තුනක් ඇත, getter (), setter () සහ delete ().
class Celsius:
def __init__(self, temperature = 0):
self.temperature = temperature
def to_fahrenheit(self):
return (self.temperature * 1.8) + 32
def get_temperature(self):
print("Getting value")
return self.temperature
def set_temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self.temperature = value
temperature = property(get_temperature,set_temperature)
මෙහි,
temperature = property(get_temperature,set_temperature)
බිඳ දැමිය හැකිය,
# make empty property
temperature = property()
# assign fget
temperature = temperature.getter(get_temperature)
# assign fset
temperature = temperature.setter(set_temperature)
සැලකිල්ලට ගත යුතු කරුණ:
- get_temperature ක්රමයක් වෙනුවට දේපලක් ලෙස පවතී.
දැන් ඔබට ලිවීමෙන් උෂ්ණත්වයේ වටිනාකමට ප්රවේශ විය හැකිය.
C = Celsius()
C.temperature
# instead of writing C.get_temperature()
Get_temperature සහ set_temperature නම් අනවශ්ය බැවින් අපට තවදුරටත් ඉදිරියට යා හැකි අතර පන්ති නාම අවකාශය දූෂණය කරයි.
මෙම pythonic මාර්ගය ඉහත සඳහන් ගැටළුවට සමග ගනුදෙනු කිරීමට භාවිතා කිරීමයි @property .
class Celsius:
def __init__(self, temperature = 0):
self.temperature = temperature
def to_fahrenheit(self):
return (self.temperature * 1.8) + 32
@property
def temperature(self):
print("Getting value")
return self.temperature
@temperature.setter
def temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self.temperature = value
සැලකිල්ලට ගත යුතු කරුණු -
- වටිනාකමක් ලබා ගැනීම සඳහා භාවිතා කරන ක්රමයක් "ropproperty" වලින් සරසා ඇත.
- කට්ටලය ලෙස ක්රියා කළ යුතු ක්රමය "@ temperature.setter" වලින් සරසා ඇත, ශ්රිතය "x" ලෙස නම් කර තිබුනේ නම්, අපට එය "@ x.setter" වලින් සරසා ගත යුතුය.
- අපි එකම නමක් සහිත "ක්රම දෙකක්" සහ වෙනස් පරාමිතීන් "ඩෙෆ් උෂ්ණත්වය (ස්වයං)" සහ "ඩෙෆ් උෂ්ණත්වය (ස්වයං, x)" ලිව්වෙමු.
ඔබට පෙනෙන පරිදි, කේතය අනිවාර්යයෙන්ම අඩු අලංකාර වේ.
දැන් අපි එක් සැබෑ ජීවිතයේ ප්රායෝගික දර්ශනයක් ගැන කතා කරමු.
ඔබ පහත පරිදි පන්තියක් නිර්මාණය කර ඇති බව කියමු:
class OurClass:
def __init__(self, a):
self.x = a
y = OurClass(10)
print(y.x)
දැන්, අපගේ පංතිය සේවාදායකයින් අතර ජනප්රිය වී ඇති බවත්, ඔවුන් එය ඔවුන්ගේ වැඩසටහන් වලදී භාවිතා කිරීමට පටන් ගත් බවත්, ඔවුන් වස්තුව සඳහා සියලු ආකාරයේ පැවරුම් කළ බවත් අපි තවදුරටත් උපකල්පනය කරමු.
එක් අවාසනාවන්ත දවසක, විශ්වාසදායක සේවාදායකයෙක් අප වෙත පැමිණ "x" අගය 0 ත් 1000 ත් අතර අගයක් විය යුතු යැයි යෝජනා කළේය, මෙය සැබවින්ම භයානක අවස්ථාවකි!
ගුණාංග නිසා එය පහසු ය: අපි "x" හි දේපල අනුවාදයක් නිර්මාණය කරමු.
class OurClass:
def __init__(self,x):
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
if x < 0:
self.__x = 0
elif x > 1000:
self.__x = 1000
else:
self.__x = x
මෙය විශිෂ්ටයි, එසේ නොවේ: ඔබට සිතාගත හැකි සරලම ක්රියාත්මක කිරීම සමඟ ආරම්භ කළ හැකි අතර, අතුරු මුහුණත වෙනස් නොකර දේපල අනුවාදයකට පසුව සංක්රමණය වීමට ඔබට නිදහස තිබේ! එබැවින් දේපල යනු ලබා ගන්නන් සහ සැකසුම්කරුවන් සඳහා ආදේශකයක් පමණක් නොවේ!
ඔබට මෙම ක්රියාත්මක කිරීම මෙතැනින් පරීක්ෂා කළ හැකිය