मैं अक्सर माता-पिता वर्ग के ओवरराइटिंग विधियों को ढूंढता हूं, और कभी यह तय नहीं कर सकता कि मुझे स्पष्ट पैरामीटर सूचीबद्ध करना चाहिए या केवल कंबल *args, **kwargs
निर्माण का उपयोग करना चाहिए। क्या एक संस्करण दूसरे से बेहतर है? क्या कोई सर्वोत्तम अभ्यास है? मुझे क्या याद आ रहा है?विरासत सर्वोत्तम अभ्यास: * तर्क, ** kwargs या स्पष्ट रूप से पैरामीटर निर्दिष्ट करते हैं
class Parent(object):
def save(self, commit=True):
# ...
class Explicit(Parent):
def save(self, commit=True):
super(Explicit, self).save(commit=commit)
# more logic
class Blanket(Parent):
def save(self, *args, **kwargs):
super(Blanket, self).save(*args, **kwargs)
# more logic
स्पष्ट संस्करण के कथित लाभ
- अधिक स्पष्ट (अजगर की ज़ेन)
- आसान समझ
- समारोह मापदंडों आसानी से
कथित लाभ का पहुँचा कंबल varia NT
- अधिक सूखी
- माता पिता वर्ग आसानी से विनिमेय है माता पिता विधि में मूलभूत मूल्यों की
- परिवर्तन अन्य कोड को बिना छुए प्रचारित कर रहा है
इसमें से बहुत कुछ इस बात पर निर्भर करता है कि आप जो उपclassing कर रहे हैं ...यदि उच्च श्रेणी है कि आप बेस क्लास के तरीकों के लिए अतिरिक्त kwargs (या कोई और करेंगे) जोड़ने जा रहे हैं, तो यह '** kwargs' के साथ चिपकने के लिए बहुत अधिक समझ में आता है। यदि यह संभव नहीं है, तो स्पष्ट रूप से निर्दिष्ट करने के लिए kwargs एक पठनीयता दृष्टिकोण से निश्चित रूप से बेहतर है। –
ठीक है, आप निश्चित रूप से जानकारी फेंक रहे हैं। * स्पष्ट * और सभी की तुलना में स्पष्ट है। – kojiro
आपके पास दो विकल्प हैं: 1) स्पष्ट रूप से पैरामीटर और * प्रतिबंधित * व्युत्पन्न कक्षाओं में हस्ताक्षर परिवर्तनों का नाम दें (अन्यथा 'सुपर' और एकाधिक विरासत के साथ अच्छा), या 2) '** kwargs' का उपयोग करें और विधियों के हस्ताक्षर को बदलने की अनुमति दें । किस का उपयोग किया जाना चाहिए शायद स्थिति पर निर्भर करता है। – Bakuriu