Używam Pythona 2.6

class Father(object):
    def __init__(self, *args, **kwargs):
        self.is_rich = 'yes'
        self.single  = 'yes'

class Son(Father):
    def __init__(self, *args, **kwargs):
        self.has_job = 'yes'

son = Son()
print dir(son)  --> Does not display Father class attributes is_rich & single? 

Czemu?

1
NullException 7 grudzień 2013, 00:50

3 odpowiedzi

Najlepsza odpowiedź

Nie zadzwoniłeś Father.__init__. Musisz zrobić tak wyraźnie lub użyć super 1,2 :

class Son(Father):
    def __init__(self, *args, **kwargs):
        Father.__init__(self, *args, **kwargs)
        self.has_job = 'yes'

1 Super uważany super!
.. 2 Super uważany za szkodliwy

3
mgilson 6 grudzień 2013, 20:52

Wygląda na to, że nie miałeś łańcucha dziecka inicjalizacji w kierunku rodzica.

Być może czytanie tego pomoże: Dlaczego automatyczny wywołano metody Supercrys Pythona ?.

2
Community 23 maj 2017, 11:49

Musisz zadzwonić do klasy bazowej __init__, ponieważ python przywołuje się tylko do pierwszej metody __init__ znaleziono w hierarchii klasy __init__ w Father nigdy nie jest wywołany. Możesz to zrobić za pomocą super lub przy użyciu Father.__init__, jak pokazano w odpowiedzi @ mgilson.

class Son(Father):
    def __init__(self, *args, **kwargs):
        super(Son, self).__init__(*args, **kwargs)
        self.has_job = 'yes'

Demo:

>>> s = Son()
>>> s.is_rich
'yes'
>>> s.single
'yes'
>>> s.has_job
'yes'
2
Ashwini Chaudhary 6 grudzień 2013, 20:58