【发布时间】:2019-09-23 11:16:18
【问题描述】:
我有一个基类A,我从它继承来创建类B。如果我在类实例上调用名称 dunder,我会得到类的名称。如果我在实例的基类上调用名称 dunder,我会得到基类的名称。到目前为止,这是有道理的。但是,如果在实例的 super() 上调用名称 dunder,我没有得到基类的名称,我不知道为什么。更令人困惑的是,如果我在 supers() 的基类上调用名称 dunder,我会得到基类的正确名称 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 调用会返回“super”。
【问题讨论】:
标签: python-3.x super superclass introspection