Вот базовый Metaclass
, намеревающийся предоставить пользовательский __init__
:
class D(type):
def __init__(cls, name, bases, attributes):
super(D, cls).__init__(name, bases, attributes)
for hook in R.registered_hooks:
setattr(cls, hook.__qualname__, hook)
Цикл for выполняет итерации по списку функций, вызывая для каждой из них setattr(cls, hook.__qualname__, hook)
.
Вот класс, который использует вышеуказанный метакласс:
class E(metaclass=D):
def __init__(self):
pass
Странная вещь:
E().__dict__ prints {}
Но когда я звоню
`E.__dict__ prints {'f1': <function f1 at 0x001>, 'f2': <function f2 at 0x002>}`
Я ожидал добавить эти функции в качестве атрибутов к атрибутам экземпляра , поскольку __init__
обеспечивает пользовательскую инициализацию для класса, но кажется, что атрибуты были добавленына Атрибуты класса .
В чем причина этого и как я могу добавить атрибуты к экземпляру в этом сценарии?Спасибо!