रेमंड हेटिंगर की बात "Super considered super speak" में पीईसीओएन 2015 में वह कई विरासत संदर्भ में पाइथन में super
का उपयोग करने के फायदे बताते हैं। self.get_dough()
बजाय super().get_dough()
का उपयोग कर के अंतर के बारे में दर्शकों asked रेमंड मेंपायथन स्व और सुपर एकाधिक विरासत में सुपर
class DoughFactory(object):
def get_dough(self):
return 'insecticide treated wheat dough'
class Pizza(DoughFactory):
def order_pizza(self, *toppings):
print('Getting dough')
dough = super().get_dough()
print('Making pie with %s' % dough)
for topping in toppings:
print('Adding: %s' % topping)
class OrganicDoughFactory(DoughFactory):
def get_dough(self):
return 'pure untreated wheat dough'
class OrganicPizza(Pizza, OrganicDoughFactory):
pass
if __name__ == '__main__':
OrganicPizza().order_pizza('Sausage', 'Mushroom')
किसी: यह उदाहरण है कि रेमंड उनकी बात के दौरान इस्तेमाल में से एक है। मुझे रेमंड के संक्षिप्त उत्तर को बहुत अच्छी तरह से समझ में नहीं आया, लेकिन मैंने अंतर देखने के लिए इस उदाहरण के दो कार्यान्वयन को कोडित किया। उत्पादन दोनों ही मामलों के लिए ही कर रहे हैं: यदि आप super().get_dough()
इस का उपयोग
Making pie with pure untreated wheat dough
हालांकि:
Getting dough
Making pie with pure untreated wheat dough
Adding: Sausage
Adding: Mushroom
आप self.get_dough()
का उपयोग कर OrganicPizza(Pizza, OrganicDoughFactory)
से वर्ग आदेश OrganicPizza(OrganicDoughFactory, Pizza)
को बदलने, तो आप इस परिणाम मिल जाएगा आउटपुट है:
Making pie with insecticide treated wheat dough
मैं super()
व्यवहार को समझता हूं क्योंकि रेमंड ने समझाया था। लेकिन एकाधिक विरासत परिदृश्य में self
के अपेक्षित व्यवहार क्या हैं?
क्या - पिज्जा * आटा कारखाने * से प्राप्त होता है? यह कोड अजीब है। – user2357112
'स्वयं' वस्तु के किसी भी अन्य संदर्भ की तरह व्यवहार करता है। यदि आप 'p = OrganicPizza()' करते हैं, तो 'p' की किसी भी विधि में 'self.get_dough()' 'p.get_dough()' के बराबर है, इससे कोई फर्क नहीं पड़ता कि विरासत में' self' का उपयोग कहां है होता है। क्या आप समझते हैं कि 'p.get_dough() 'क्या करेगा? – user2357112
@ user2357112 अजीब क्यों है? रेमंड ने अपनी बातचीत में प्रस्तावित एक साधारण उदाहरण है। –