2024-09-22 20:37:56 发布
网友
假设我用这样的元类定义一个类A:
A
class Meta(type): pass class A(metaclass=Meta): pass
然后,当我试图访问类名A时,我得到了元类的名称:
但是,它不应该给我A,我定义的类吗?在
注意:我试图使用A.__mro__[0].__name__,它确实给了我A,但是我仍然不明白为什么A.__class__给了我这个元类名。有人对此有什么解释吗?在
A.__mro__[0].__name__
A.__class__
A已经是类-它的名称在A.__name__下。 如果您尝试A.__class__.__name__,您将得到A是instance的类(即,它的元类),name。在
A.__name__
A.__class__.__name__
A.__mro__[0].__name__将遵循类A的“方法解析顺序”-__mro__对象是一个元组,它具有从定义的类本身开始到object结束的所有类层次结构。因此,A.__mro__[0]将始终是A本身,A.__mro__[0].__name__与{}相同。在
__mro__
object
A.__mro__[0]
__name__和__qualname__属性是可写属性:例如,在创建类之后更改{{}将更改该类实例的默认__repr__。尽管它们在语言定义中并且“活”在类的槽中(不是在它的字典中),但是可以创建一个__name__属性(我的意思是,内置的property对象,或任何其他描述符),它将动态更改类的__name__属性(但不是__qualname__-这必须是类的属性,并且必须是字符串)
__name__
__qualname__
__repr__
property
__class__邓德报告:
__class__
the class to which a class instance belongs.
引自^{}
class A属于其元类的类,只有A的实例属于类{}本身。在
class A
a = A() print(a.__class__.__name__) # 'A' print(A.__class__.__name__) # 'Meta' class P: pass print(P.__class__.__name__) # type print(P().__class__.__name__) # P
要获得类本身的名称,只需使用
如果你真的需要的话。在
我仍然是一个摸索所有answer到{a3}的方法-也许这对你有帮助。在
A
已经是类-它的名称在A.__name__
下。 如果您尝试A.__class__.__name__
,您将得到A
是instance的类(即,它的元类),name。在A.__mro__[0].__name__
将遵循类A的“方法解析顺序”-__mro__
对象是一个元组,它具有从定义的类本身开始到object
结束的所有类层次结构。因此,A.__mro__[0]
将始终是A
本身,A.__mro__[0].__name__
与{__name__
和__qualname__
属性是可写属性:例如,在创建类之后更改{{__repr__
。尽管它们在语言定义中并且“活”在类的槽中(不是在它的字典中),但是可以创建一个__name__
属性(我的意思是,内置的property
对象,或任何其他描述符),它将动态更改类的__name__
属性(但不是__qualname__
-这必须是类的属性,并且必须是字符串)__class__
邓德报告:引自^{}
class A
属于其元类的类,只有A
的实例属于类{要获得类本身的名称,只需使用
^{pr2}$如果你真的需要的话。在
我仍然是一个摸索所有answer到{a3}的方法-也许这对你有帮助。在
相关问题 更多 >
编程相关推荐