从其 metaclass python 引用 class 的实例

refering to instance of a class from its metaclass python

每次创建实例时,有什么方法可以从其元class 中引用class 的实例吗?我想我应该为此目的在 metaclass 中使用 dunder _call_ 方法。

我有以下代码:

class meta(type):   
    def __call__(cls):
       super().__call__()
       #<--- want to get an object of A class here every time when instance of A class is created

class A(metaclass = meta):
    def __init__(self, c):
        self.c = 2

    def test(self):
        print('test called')
   
a1=A()
a2=A()
a3=A()

另外,为什么当我在 metaclass 中实现 __call__ 方法时,我的 class 所有创建的实例都变成了 NoneType 但是当覆盖 __call__ 我使用 super().__call__() ? 例如 a4.test() returns AttributeError: 'NoneType' object has no attribute 'test'

新创建的实例是由 super().__call__() 编辑的 return - 你必须将这个值保存在一个变量中,使用 t 作为你想要的任何东西并 return 它。

否则,如果元类 __call__ 没有 return 语句,所有实例都会立即取消引用并销毁,并且尝试创建实例的代码只会得到 None:


class meta(type):   
    def __call__(cls):
       obj = super().__call__()
       # use obj as you see fit
       ...
       return obj