class Metaclass(type):
def __new__(meta, clsname, supers, attrdict):
print('In M.__new__:')
print([clsname, supers, list(attrdict.keys())])
def decorator(cls):
return Metaclass(
cls.__name__,
cls.__bases__,
dict(cls.__dict__),
)
class A:
x = 1
@decorator
class B(A):
y = 2
def m(self):
return self.x + self.y
B.x, B.y
i = B()
i.x, i.y, i.m()
По книге должно быть:
B.x, B.y
(1, 2)
i = B()
i.x, i.y, i.m()
(1, 2, 3)
по факту:
./test.py
In M.__new__:
['B', (<class '__main__.A'>,), ['__module__', 'y', 'm', '__doc__']]
Traceback (most recent call last):
File "/home/user/code/./test.py", line 360, in <module>
B.x, B.y
AttributeError: 'NoneType' object has no attribute 'x'
Если я делаю
print(B)
out: None
т.е не «отдекорировался» класс