gpt4 book ai didi

python-3.x - 为什么 super().__class__.__name__ 不返回我的基类的名称?

转载 作者:行者123 更新时间:2023-12-02 20:23:38 25 4
gpt4 key购买 nike

我有一个基类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”。

最佳答案

这是因为 super 实际上是一个独特的类,它抽象了你的基类。 Super实际上并不是基类。当你这样做时super()您将获得父类(super class)的实例,而不是基类的实例。
如果您尝试print(super())在你的例子中你会得到 <super: <class 'B'>, <B object>>

关于python-3.x - 为什么 super().__class__.__name__ 不返回我的基类的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com