【发布时间】:2017-03-31 21:18:10
【问题描述】:
从元类中实例化一个类可以做什么?据我了解,通常__init__、__del__、__call__ 等方法来自默认元类type。这是正确的吗?
【问题讨论】:
从元类中实例化一个类可以做什么?据我了解,通常__init__、__del__、__call__ 等方法来自默认元类type。这是正确的吗?
【问题讨论】:
我们不应该谈论继承,而应该谈论实例化。类与其元类的关联方式与实例与其基类的关联方式相同。类是元类的一个实例。
特别是在元类上定义的每个字段都可以作为“元类字段”从类中访问。因此,如果一个元类用于多个类,则元类上的字段将在这些类之间共享。
请注意,元类上的__init__ 与类上的__init__ 不同。这些是无关的。 __call__ 也成为一个新的“构造函数”。看看这个:
>>> class Meta(type):
... def __call__(self):
... return 1
>>> class Foo(metaclass=Meta):
... pass
>>> Foo()
1
【讨论】:
__init__ __del__ __new__ 在默认元类 type 上定义为其元类字段。我说的对吗?