[PYTHON] Das Definieren einer untergeordneten Klasseneigenschaft oder -methode überschreibt die übergeordnete Klassendefinition nicht

Das ist auch natürlich ... Wenn Sie jedoch nicht aufpassen, denken Sie vielleicht "das?" Stellen Sie sich zum Beispiel eine Klasse wie diese vor.

class A:
    prop1 = 123
    prop2 = prop1
    
    def hoge(self):
        return 'superhoge'
    
    fuga = hoge
    


class SubA(A):
    prop1 = 777
    
    def hoge(self):
        return 'hoge'

Wenn Sie ein SubA-Objekt erstellen, sehen hoge () und prop1 natürlich so aus.

>>> a = SubA()
>>> print(a.hoge())
hoge
>>> print(a.prop1)
777

Was ist übrigens mit Prop2 und Fuga? Da sie sich auf prop1 bzw. hoge beziehen, scheint es, dass das gleiche Ergebnis erzielt wird, wenn sie überschrieben werden. Dies ist jedoch tatsächlich der Fall.

>>> a = SubA()
>>> print(a.fuga())
superhoge
>>> print(a.prop2)
123

Daraus können wir ersehen, dass sich prop2 und fuga auf die Definition der übergeordneten Klasse beziehen. Als objektorientierter Mechanismus wird häufig der Ausdruck "Mit untergeordneter Klasse überschreiben" verwendet, der jedoch falsch ist. Ich denke, Sie sollten vorsichtig sein, wie Sie Wörter verwenden.

Recommended Posts

Das Definieren einer untergeordneten Klasseneigenschaft oder -methode überschreibt die übergeordnete Klassendefinition nicht
Ich habe versucht, eine Methode zur Berechnung des Bewertungsindex (Spezifität, NPV) zu implementieren, die scikit-learn nicht hat