Running following code:
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)
results in
/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'
Why attr from the WithMeta class is a class variable while it is an instance variable in the NonMeta class?