【发布时间】:2022-08-17 01:21:28
【问题描述】:
MyMeta.__init__ 实现如下。这个函数应该返回什么吗?它现在返回一个实例,这有什么影响吗?在元类中编写自定义__init__ 函数的用法示例是什么?
class MyMeta(type):
def __new__(cls, name, bases, attr):
print(\"***MyMeta.__new__ called\")
instance = super(MyMeta, cls).__new__(cls, name, bases, attr)
instance.v_new = \"v_new\"
return instance
def __init__(cls, name, bases, namespace, **kwargs):
print(\"***MyMeta.__init__ called\")
instance = super(MyMeta, cls).__init__(name, bases, namespace, **kwargs)
return instance
class AClass(metaclass=MyMeta):
def __init__(self):
print(\"@@@AClass.__init__ called\")
print(\"---> \")
a = AClass()
print(a.v_new)
-
元类的实例是类。因此,当您定义一个将其用作元类的新类时,将调用
__init__()方法。它就像任何其他__init__()方法一样被调用。实例已经创建——它在cls参数中——并且没有使用返回值。 -
在realpython.com/python-metaclasses 的元类中有一个使用
__init__()的示例。它在使用元类定义的每个类中设置一个类属性。
标签: python