2017-12-08 5 views
1

Also schreibe ich ein Programm in PyQt5 und benutze die QObject-Klasse. Hier ist das Grundprogramm.Python Child-Objekt, das nicht auf das Eltern-Attribut zugreift

class Object(QObject): 

    def __init__(self, parent=None): 
     super(Object, self).__init__(parent) 
     self.field = [] 


class Object2(Object): 

    def __init__(self): 
     super(Object, self).__init__() 
     self.field.append(1) 

if __name__ == '__main__': 
    o = Object2() 

Aber ich bin immer diese Fehlermeldung:

AttributeError: 'Object2' object has no attribute 'field' 

Ich kann nicht die Ursache des Problems zu finden scheinen. Kann eine Python-Kindklasse nicht auf ihre Elternattribute zugreifen?

Antwort

3

Der Fehler, den Sie erhalten, liegt an den Argumenten, die Sie in super übergeben. In Python 2 benötigt es 2 Argumente: Das erste Argument ist die aktuelle Klasse (Object2) und das zweite Argument ist die aktuelle Instanz (self).

Das Problem ist, dass Sie die Klasse Mutter bestanden haben statt der aktuellen Klasse. So

Sie wollen:

class Object2(Object): 
    def __init__(self): 
     super(Object2, self).__init__() # Current class: Object2 
     self.field.append(1) 

In Python 3 ist es nicht mehr erforderlich ist, um diese Argumente in super passieren. Sie würden also nur tun:

class Object2(Object): 
    def __init__(self): 
     super().__init__() 
     self.field.append(1) 

Siehe auch:

https://stackoverflow.com/a/5066411/7220776

Python 2 docs: https://docs.python.org/2/library/functions.html#super

Python 3 docs: https://docs.python.org/3/library/functions.html#super

Verwandte Themen