获取类的meta名称

2024-09-22 20:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我用这样的元类定义一个类A

class Meta(type):
    pass

class A(metaclass=Meta):
    pass

然后,当我试图访问类名A时,我得到了元类的名称:

^{pr2}$

但是,它不应该给我A,我定义的类吗?在

注意:我试图使用A.__mro__[0].__name__,它确实给了我A,但是我仍然不明白为什么A.__class__给了我这个元类名。有人对此有什么解释吗?在


Tags: name名称定义typepassmetaclassmetaclass
2条回答

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__邓德报告:

the class to which a class instance belongs.

引自^{}

class A属于其元类的类,只有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

要获得类本身的名称,只需使用

^{pr2}$

如果你真的需要的话。在


我仍然是一个摸索所有answer到{a3}的方法-也许这对你有帮助。在

相关问题 更多 >