मैं पाइथन क्लास की __setattr__
विधि को ओवरराइड करने का प्रयास कर रहा हूं, क्योंकि जब भी एक आवृत्ति विशेषता उसके मान को बदलती है तो मैं एक और फ़ंक्शन कॉल करना चाहता हूं। हालांकि, मैं __init__
विधि में इस व्यवहार नहीं करना चाहते, क्योंकि इस आरंभीकरण के दौरान मैं कुछ गुण है जो बाद में इस्तेमाल किया जा जा रहे हैं सेट:, अब तक मैं इस समाधान हैरनटाइम पर __setattr__ ओवरराइडिंग
रनटाइम पर __setattr__
अधिभावी बिना:
class Foo(object):
def __init__(self, a, b):
self.a = a
self.b = b
result = self.process(a)
for key, value in result.items():
setattr(self, key, value)
# override self.__setattr__ here
def aux(self, name, value):
print(self.b)
object.__setattr__(self, name, value)
मैं ०१२३१३४२१० साथ की कोशिश की है:
class Foo(object):
def __init__(self, a, host):
object.__setattr__(self, 'a', a)
object.__setattr__(self, 'b', b)
result = self.process(a)
for key, value in result.items():
object.__setattr__(self, key, value)
def __setattr__(self, name, value):
print(self.b) # Call to a function using self.b
object.__setattr__(self, name, value)
हालांकि, मैं इन object.__setattr__(...)
से बचने और __init__
विधि के अंत में __setattr__
ओवरराइड करना चाहेंगेऔर object.__setitem__['__setitem__'] = self.aux
, लेकिन इनमें से कोई भी प्रयास प्रभावशाली नहीं है। मैंने this section of the data model reference पढ़ा है, लेकिन ऐसा लगता है कि __setattr__
का असाइनमेंट थोड़ा मुश्किल है।
कैसे __init__
के अंत में __setattr__
ओवरराइड करने के लिए संभव हो सकता है, या कम से कम एक pythonic समाधान जहां __setattr__
केवल निर्माता में सामान्य तरीके से कहा जाता है?
वाह !!! बस वाह। मैंने इस पर ठोकर खाई और लगभग इसे खारिज कर दिया, लेकिन जैसा कि यह पता चला है कि मुझे वही समस्या हल करने की ज़रूरत है। इस जवाब में कुछ गंभीर पायथन जादू। क्षमा करें मैं 100 बार ऊपर नहीं उठा सकता: पी – velis