पायथन में, मैं चाइल्ड क्लास कंस्ट्रक्टर में पेरेंट क्लास एट्रिब्यूट्स को कैसे सेटअप कर सकता हूं।

मेरे अभिभावक वर्ग में 2 विशेषताएँ हैं जो इसके निर्माता में सेट हैं:

class Parent:
    def __init__(self):
        self.attribute1 = "abc"
        self.attribute2 = 1

    def afunction():
         # something to print attributes"
         print(self.attribute1 + self.attribute2)

मेरे बाल वर्ग में, कंस्ट्रक्टर में, मैं attribute1, attribute2 द्वारा ओवरराइड करने का प्रयास करता हूं

class Child(Parent):
    def __init__(self):
        super.attribute1 = "def"
        super.attribute2 = 3

लेकिन मुझे त्रुटि मिलती है TypeError: can't set attributes of built-in/extension type 'super'

मैं क्या चाहता हूं जब x = चाइल्ड () x.afunction (), मुझे इसे "def3" प्रिंट करते हुए देखना चाहिए

-1
si Hwang 9 जुलाई 2021, 22:52

2 जवाब

सबसे बढ़िया उत्तर

आपको विरासत का सही तरीके से उपयोग करना चाहिए। आपके मूल वर्ग में पहले से ही 2 विशेषताएँ हैं, लेकिन आप उन्हें ग्राहकों के साथ-साथ उपवर्गों द्वारा तत्काल किए जाने के लिए पैरामीट्रिज्ड होने के लिए उजागर नहीं कर रहे हैं। आप इसे इस प्रकार कर सकते हैं:

class Parent:
    def __init__(self, attribute1="abc", attribute2=1):
        self.attribute1 = attribute1
        self.attribute2 = attribute2

    def afunction(self):
        print(self.attribute1 + str(self.attribute2))


class Child(Parent):
    def __init__(self, attribute1="def", attribute2=3):
        super().__init__(attribute1, attribute2)


Child().afunction()
Child("test", 3).afunction()

इस तरह आप ग्राहकों को आपकी विशेषताओं के लिए मूल्य प्रदान करने की अनुमति दे रहे हैं, न कि उन्हें बच्चे में पुन: असाइन करें। ग्राहकों के लिए विशेषताओं को भी उजागर करना ताकि वे उन्हें पास कर सकें यदि उन्हें आवश्यकता हो तो यह डिफ़ॉल्ट मान का उपयोग करता है

0
Felix K Jose 9 जुलाई 2021, 20:13

इसे Super() के स्थान पर मिला Parent. के साथ इसे एक्सेस करने का प्रयास करें और फिर इसे प्रिंट करें मैं निश्चित रूप से कहूंगा कि आपको अपना उत्तर मिल जाएगा: 'डीईएफ़'

-1
TeraCotta 10 जुलाई 2021, 06:31