कुछ ऑब्जेक्ट उन्मुख भाषाओं को निजी विशेषताएँ कहा जाता है, जिन्हें क्लास विधियों के बाहर से एक्सेस नहीं किया जा सकता है। यह महत्वपूर्ण है क्योंकि कुछ विशेषताओं को सीधे बदलने के लिए नहीं हैं, इसके बजाय, उन्हें किसी अन्य चीज़ के कार्य के रूप में बदला जाना है, या वे बदलने से पहले मान्य हैं। पायथन में आपके पास निजी विशेषताएँ नहीं हैं, लेकिन आप गेटर्स और सेटर्स का उपयोग करके एक चर को लागू कर सकते हैं जो अंडरस्कोर से शुरू होता है - निजी तरीकों और विशेषताओं के लिए पायथन का सम्मेलन।
उदाहरण के लिए। आयताकार त्रिभुज का hypotenuse h=sqrt(a*a+b*b)
द्वारा दिया जाता है, इसलिए आप सीधे h
नहीं बदल सकते क्योंकि संबंध होना चाहिए। साथ ही, कहें कि मुझे नाम LASTNAME COMMA FIRSTNAME
प्रारूप में होना चाहिए, तो आपको यह सत्यापित करना होगा कि self.lastname
असाइन करने से पहले यह मामला है।
संपत्ति गेटर आपको hypotenuse प्राप्त करने की अनुमति देता है, लेकिन इसे स्थापित करने से आपको रोकता है। प्रॉपर्टी सेटर आपको एक संपत्ति सेट करने की इजाजत देता है लेकिन आप वास्तव में संपत्ति को सेट करने से पहले चेक कर सकते हैं।
तो:
class Person(object)
def __init__(self):
# The actual attribute is _name
self._name = None
@property
def name(self):
# when I ask for the name, I mean to get _name
return self._name
@name.setter
def name(self, value):
# before setting name I can ensure that it has the right format
if regex_name.match(value):
# assume you have a regular expression to check for the name
self._name = value
else:
raise ValueError('invalid name')
एक और उदाहरण:
class Triangle(object):
def __init__(self, a, b):
# here a and b do not need to be private because
# we can change them at will. However, you could
# make them private and ensure that they are floats
# when they are changed
self.a = a
self.b = b
@property
def h(self):
return math.sqrt(a*a+b*b)
# notice there is no h.setter - you cannot set h directly
'वापसी 40' - मुझे xkcd के यादृच्छिक संख्या जनरेटर की याद दिलाता है! – katrielalex