【发布时间】:2019-12-09 06:01:50
【问题描述】:
运行以下代码:
class NonMeta:
def __new__(cls):
x = super().__new__(cls)
x.attr = 100
return x
class Meta(type):
def __new__(mcs, name, bases, dct):
x = super().__new__(mcs, name, bases, dct)
x.attr = 100
return x
class WithMeta(metaclass=Meta):
pass
print(WithMeta.attr)
print(NonMeta.attr)
结果
/usr/bin/python3.7 /home/lookash/PycharmProjects/PythonLearning/classes.py
100
Traceback (most recent call last):
File "/home/lookash/PycharmProjects/PythonLearning/classes.py", line 20, in <module>
print(NonMeta.attr)
AttributeError: type object 'NonMeta' has no attribute 'attr'
为什么 WithMeta 类中的 attr 是类变量,而 NonMeta 类中的 attr 是实例变量?
【问题讨论】: