【问题标题】:What Can be instantiation from a Metaclass什么可以从元类实例化
【发布时间】:2017-03-31 21:18:10
【问题描述】:

从元类中实例化一个类可以做什么?据我了解,通常__init____del____call__ 等方法来自默认元类type。这是正确的吗?

【问题讨论】:

    标签: python oop metaclass


    【解决方案1】:

    我们不应该谈论继承,而应该谈论实例化。类与其元类的关联方式与实例与其基类的关联方式相同。类是元类的一个实例。

    特别是在元类上定义的每个字段都可以作为“元类字段”从类中访问。因此,如果一个元类用于多个类,则元类上的字段将在这些类之间共享。

    请注意,元类上的__init__ 与类上的__init__ 不同。这些是无关的。 __call__ 也成为一个新的“构造函数”。看看这个:

    >>> class Meta(type):
    ...     def __call__(self):
    ...         return 1
    
    >>> class Foo(metaclass=Meta):
    ...     pass
    
    >>> Foo()
    1
    

    【讨论】:

    • so __init__ __del__ __new__ 在默认元类 type 上定义为其元类字段。我说的对吗?
    • @RavinduShantha 是的。
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 2022-08-10
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多