Проблема в том, что вы используете переменную с префиксом __
. Официально python не имеет частных переменных, но когда вы используете var с префиксом __
, он сохраняется как _className__var
,
Если вы заглянете внутрь a.__dict__
:
a.__dict__
Out[9]: {'_A__name': 'A'}
Итак, когда вы выполняете a.getName()
, наследование logi c, которое, как вы ожидаете, приведет к тому, что родитель ищет getName
, глядя на prints.__dict__
(который находит совпадение)
Это будет попытаться разрешить __name
родителя, за исключением того, что в этом случае он будет искать его как _prints__name
из self
, который является экземпляром A
.
Это называется искажением имени