La définition d'une propriété ou d'une méthode de classe enfant ne remplace pas la définition de classe parent

C'est aussi naturel ... Cependant, si vous ne faites pas attention, vous pouvez penser "ça?" Par exemple, considérez une classe comme celle-ci.

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


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

Lorsque vous créez un objet SubA, hoge () et prop1 ressembleront naturellement à ceci.

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

Au fait, qu'en est-il de prop2 et fuga? Puisqu'elles se réfèrent respectivement à prop1 et hoge, il semble que le même résultat sera obtenu si elles sont écrasées. Cependant, c'est effectivement le cas.

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

De là, nous pouvons voir que prop2 et fuga font référence à la définition de la classe parente. En tant que mécanisme orienté objet, l'expression «écraser avec la classe enfant» est souvent utilisée, mais elle est incorrecte. Je pense que vous devriez faire attention à la façon dont vous utilisez les mots.

Recommended Posts

La définition d'une propriété ou d'une méthode de classe enfant ne remplace pas la définition de classe parent
J'ai essayé d'implémenter une méthode pour calculer l'indice d'évaluation (spécificité, NPV) que scikit-learn n'a pas