आप here दोनों के बारे में अधिक पढ़ सकते हैं। लेकिन यहां एक ही पुस्तक से एक साधारण उदाहरण है जो अलग-अलग हल करने की कोशिश करता है जो एक ही समस्या है। जैसा कि आप देख सकते हैं, गुणों का उपयोग कर कार्यान्वयन बहुत आसान है।
कई तरीके हैं जिन्हें हम विशेषता मान प्राप्त करने और सेट करने के लिए पाइथन के आंतरिक तंत्र में टैप कर सकते हैं। सबसे सुलभ तकनीक एक विशेषता नाम से जुड़े तरीकों को प्राप्त करने, सेट करने और हटाने के लिए प्रॉपर्टी फ़ंक्शन का उपयोग करना है। प्रॉपर्टी फ़ंक्शन आपके लिए डिस्क्रिप्टर बनाता है। थोड़ा कम सुलभ, लेकिन अधिक विस्तारणीय और पुन: प्रयोज्य तकनीक स्वयं वर्णनकर्ता वर्गों को परिभाषित करना है। यह आपको काफी लचीलापन की अनुमति देता है। आप ऐसा वर्ग बनाकर करते हैं जो विधियों को प्राप्त, सेट और हटाता है, और आप अपने वर्णनकर्ता वर्ग को विशेषता नाम के साथ जोड़ते हैं।
संपत्ति समारोह हमें एक अलग वर्ग को परिभाषित किए बिना एक सरल वर्णनकर्ता को लागू करने का एक आसान तरीका प्रदान करता है। एक पूर्ण श्रेणी परिभाषा बनाने के बजाय, हम गेटर और सेटर विधि फ़ंक्शन लिख सकते हैं, और फिर इन फ़ंक्शंस को एक विशेषता नाम पर बाध्य कर सकते हैं।
डिस्क्रिप्टर उदाहरण:
class Celsius(object):
def __init__(self, value=0.0):
self.value= float(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value= float(value)
class Farenheit(object):
def __get__(self, instance, owner):
return instance.celsius * 9/5 + 32
def __set__(self, instance, value):
instance.celsius= (float(value)-32) * 5/9
class Temperature(object):
celsius= Celsius()
farenheit= Farenheit()
>>>
oven= Temperature()
>>>
oven.farenheit= 450
>>>
oven.celsius
232.22222222222223
>>>
oven.celsius= 175
>>>
oven.farenheit
347.0
संपत्ति उदाहरण:
class Temperature(object):
def fget(self):
return self.celsius * 9/5 + 32
def fset(self, value):
self.celsius= (float(value)-32) * 5/9
farenheit= property(fget, fset)
def cset(self, value):
self.cTemp= float(value)
def cget(self):
return self.cTemp
celsius= property(cget, cset, doc="Celsius temperature")
>>>
oven= Temperature()
>>>
oven.farenheit= 450
>>>
oven.celsius
232.22222222222223
>>>
oven.celsius= 175
>>>
oven.farenheit
347.0
यह ध्यान देने योग्य है कि अजगर जहां आवश्यक को छोड़कर getters और setters के उपयोग को हतोत्साहित ... लायक हो सकता है या यह नहीं हो सकता .. –
@ जोरन बेस्ले यह पूरी तरह से अनावश्यक के रूप में ज्यादा निराश नहीं है। चूंकि पाइथन आपको विशेषता पहुंच को ओवरराइड करने देता है, इसलिए आप यह तय कर सकते हैं कि आपको उप-वर्ग में इसकी आवश्यकता है। यदि आपको गणना की गई संपत्ति की आवश्यकता है, तो गेटटर का उपयोग करना उचित है। जावा/सी # में, आपको आगे तय करने की आवश्यकता है कि क्या आप एक विशिष्ट विशेषता तक पहुंच को ओवरराइड करने की अनुमति देना चाहते हैं, और कक्षा पदानुक्रम के शीर्ष पर इसे प्रदान करना चाहते हैं। यही कारण है कि संपत्तियों का व्यापक रूप से उपयोग करना आम है: यह "बस मामले में" किया जाता है। – millimoose