У меня есть базовый класс A
, от которого я наследую, чтобы создать класс B
.Если я называю имя dunder в экземпляре класса, я получаю имя класса.если я называю имя dunder в базовом классе экземпляра, я получаю имя базового класса.Это имеет смысл до сих пор.Однако, если вызвать имя dunder для экземпляра super (), я не получу имя базового класса и не знаю почему.Чтобы сделать вещи более запутанными, если я вызову имя dunder в базовом классе supers (), я получу правильное имя для базового класса base object
.
class A:
pass
class B(A):
def __init__(self):
self.inherited_class_name = self.__class__.__name__
self.base_class_name = self.__class__.__bases__[0].__name__
self.should_return_base_class_name = super().__class__.__name__
self.base_class_base_class = super().__class__.__bases__[0].__name__
if __name__ == '__main__':
b = B()
print(b.inherited_class_name)
print(b.base_class_name)
print(b.should_return_base_class_name) # Why does this return "super" instead of "A"?
print(b.base_class_base_class) # Especially when this one works...
печатает
B
A
super
object
Я не понимаю, почему "супер" возвращается из моего should_return_base_class_name
вызова.