【发布时间】:2019-05-29 07:41:18
【问题描述】:
假设我用这样的元类定义了一个类A:
class Meta(type):
pass
class A(metaclass=Meta):
pass
然后,当我尝试访问 A 类的名称时,我得到了元类的名称:
A.__class__.__name__
# 'Meta'
但是,它不应该给我A,我定义的类吗?
注意:我尝试使用A.__mro__[0].__name__,它确实给了我A,但我仍然很困惑为什么A.__class__ 给了我元类名称。有人对此有解释吗?
【问题讨论】:
-
a = A()和print(a.__class__.__name__)...'A'-class P: pass...print(P.__class__.__name__)是type和P如果您使用实例 ... 似乎合法 -
哦,是的。有没有办法在不实例化和不使用
__mro__的情况下获取类名? -
使用
A.__name__? -
啊……这正是我所缺少的。不知道我是怎么错过的。随意写这个作为答案。
-
因为A的类是元类。所以 name 将是元。一个类对象是一个实例,就像任何其他的一样,所以就像你做了
a = A()和a.__class__.__name__会给你A
标签: python python-3.x metaclass