gpt4 book ai didi

python - 如何自动将类变量添加到某些子类

转载 作者:行者123 更新时间:2023-11-28 20:51:06 26 4
gpt4 key购买 nike

class A(object):
_all = set()

def __new__(cls):
obj = super(A,cls).__new__(cls)
cls._all.add(obj)
return obj

class B(A):
pass

class C(A):
pass

b = B()
c = C()

这将创建所有实例并将它们放入A._all。我想要的是将 C 的实例放在 C._all 中(对于 C 也是如此)。

我可以这样定义 BC:

class B(A):
_all = set()

class C(A):
_all = set()

哪个可行。但是,这感觉就像是重复代码,如果我在接下来对 A 进行子类化时忘记添加 _all,或者拼错了 _alll,我很可能很难调试错误。

我将如何做好这件事?

最佳答案

_all 设置为 None 并在 __new__ 中创建你的集合,如果仍然是 None,给每个类它是自己的副本:

class A(object):
_all = None

def __new__(cls):
obj = super(A,cls).__new__(cls)
if cls._all is None:
cls._all = set()
cls._all.add(cls)
return obj

关于python - 如何自动将类变量添加到某些子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com