दिलचस्प पोस्ट
ओपनURL काम एक्सटेंशन में काम नहीं करता ड्रॉपबॉक्स के साथ मर्कुरियल (और, मुझे गिट लगता है): कोई भी कमियां? प्रोटोकैक्टर वैश्विक चर सेट जावास्क्रिप्ट में बंद – क्या गलत है? सी में Ctrl-C पकड़ो C # में एक अपवाद को फिर से फेंकने का सही तरीका क्या है? WPF: मैं एक विंडो में सभी नियंत्रणों के माध्यम से कैसे लूप कर सकता हूँ? ViewController का जवाब TOSelector: संदेश को deallocated उदाहरण (CRASH) को भेजा गया यदि कोई चयनकर्ता रिक्त करता है तो मुझे कैसे पता लगा सकता है? JavaScript में वैकल्पिक फ़ंक्शन पैरामीटर को छोड़ना Uibutton ios के लिए तालिका दृश्य प्रकटन सूचक शैली का उपयोग करें आकार की वापसी 0 (शून्य) कर सकते हैं रूपान्तरित IO फ़ंक्शंस में रूपांतरण विनिर्देशकों% i और% d में अंतर क्या है (* printf / * scanf) तुलना करें विधि जावा पुराने पासवर्ड के साथ प्रमाणीकरण अब समर्थित नहीं है, 4.1 शैली पासवर्ड का उपयोग करें

गेटर्स और सेटर्स का उपयोग करने के लिए अजगर का तरीका क्या है?

मैं इसे पसंद कर रहा हूं:

def set_property(property,value): def get_property(property): 

या

 object.property = value value = object.property 

मैं पायथन के लिए नया हूँ, इसलिए मैं अभी भी सिंटैक्स की खोज कर रहा हूं, और मुझे यह करने पर कुछ सलाह चाहिए

वेब के समाधान से एकत्रित समाधान "गेटर्स और सेटर्स का उपयोग करने के लिए अजगर का तरीका क्या है?"

पायथनिक तरीका उनको उपयोग नहीं करना है। यदि आप उन्हें चाहिए तो उन्हें एक संपत्ति के पीछे छिपाएं

यह प्रयास करें: पायथन संपत्ति

नमूना कोड है:

 class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" print("getter of x called") return self._x @x.setter def x(self, value): print("setter of x called") self._x = value @x.deleter def x(self): print("deleter of x called") del self._x 

गेटर्स और सेटर्स का उपयोग करने के लिए अजगर का तरीका क्या है?

 def set_property(property,value): def get_property(property): 

या

 object.property = value value = object.property 

दूसरा उदाहरण पायथनिक है (योग्यता के लिए नीचे 3 बिंदु देखें) पहला उदाहरण गैर-पायथनिक है – कई कारणों से:

  1. हमारे पास setattr फ़ंक्शंस, setattr और getattr :

     setattr(object, 'property_name', value) getattr(object, 'property_name', default_value) # default is optional 
  2. हमारे पास @property और सेटर्स बनाने के लिए @property डेकोरेटर हैं, जो इस तरह से बनाए गए हैं:

     class Protective(object): @property def protected_value(self): return self._protected_value @protected_value.setter def protected_value(self, value): if acceptable(value): # eg type or range check self._protected_value = value 
  3. जबकि उपरोक्त तत्वों की रक्षा करने का पायथनिक तरीका है, सामान्य तौर पर, हम property का उपयोग करने से बचना चाहते property और केवल सीधा विशेषताओं का उपयोग करना चाहते property । यह मानते हुए कि आप अपने दूसरे उदाहरण में क्या कहते हैं, चलो बस property से मेटा-चर नाम बदलने के लिए attribute को परिवर्तित करें:

     object.attribute = value value = object.attribute 

    सामान्य तौर पर, पायथन के उपयोगकर्ताओं द्वारा यह अपेक्षा की जाती है। कम से कम आश्चर्य के नियम के बाद, आपको अपने उपयोगकर्ताओं को जो अपेक्षा की जाती है उन्हें देने का प्रयास करना चाहिए, जब तक कि आपके विपरीत के लिए बहुत मजबूती का कारण न हो।

प्रदर्शन

उदाहरण के लिए, कहते हैं कि 0 और 100 के बीच पूर्णांक बनने के लिए हमारे ऑब्जेक्ट के संरक्षित विशेषता की आवश्यकता है:

 class Protective(object): def __init__(self, start_protected_value=0): self.protected_value = start_protected_value @property def protected_value(self): return self._protected_value @protected_value.setter def protected_value(self, value): if isinstance(value, int) or (isinstance(value, float) and value.is_integer()): if 0 <= value <= 100: self._protected_value = int(value) else: raise ValueError("protected_value must be " + "between 0 and 100 inclusive") else: raise TypeError("protected_value must be an integer") 

और उपयोग:

 >>> p1 = Protective(3) >>> p1.protected_value 3 >>> p1 = Protective(5.0) >>> p1.protected_value 5 >>> p2 = Protective(-5) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in __init__ File "<stdin>", line 15, in protected_value ValueError: protectected_value must be between 0 and 100 inclusive >>> p1.protected_value = 7.3 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 17, in protected_value TypeError: protected_value must be an integer >>> p1.protected_value = 101 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 15, in protected_value ValueError: protectected_value must be between 0 and 100 inclusive 
 In [1]: class test(object): def __init__(self): self.pants = 'pants' @property def p(self): return self.pants @p.setter def p(self, value): self.pants = value * 2 ....: In [2]: t = test() In [3]: tp Out[3]: 'pants' In [4]: tp = 10 In [5]: tp Out[5]: 20 

@property डेकोरेटर की जांच करें

परिभाषित __setattr__(self, name, value) और / या __getattr__(self, name)