gpt4 book ai didi

python - 如何在python中自动创建父类的所有子对象?

转载 作者:行者123 更新时间:2023-12-04 08:16:28 24 4
gpt4 key购买 nike

我想为一个父类的所有子类自动创建对象。例如:这是父类

from abc import ABC,abstractmethod
class Parent(ABC):
@abstractmethod
def fetch(self):
# some code here

现在我为这个父类创建子类

#child classes
class obj1(Parent):
def fetch(self):
# some code

class obj2(Parent):
def fetch(self):
# some code

class obj3(Parent):
def fetch(self):
# some code

现在我的问题是,我想为这里分类的所有这些子类自动创建一个对象,并将它们保存在一个 objectList 中。这样即使以后有人创建了一个新的子类,代码也会自动为那个新的子类并将其追加到 objectList 中。

我可以通过以下方式手动执行此操作:

objectList = []
objectList.append(obj1())
objectList.append(obj2())
objectList.append(obj3())

但是如果有人创建了一个新的 child ,例如 obj4() 我必须手动附加 obj4.如何自动创建所有子类的对象?

最佳答案

在 python3 中,子类会自动注册,并通过 __subclasses__ 方法提供:

objectList = [cls() for cls in Parent.__subclasses__()]

也可以使用元类,尽管这样您最终会得到列表中的所有类,包括父类:

class MetaParent(type):
subclasses = []
def __new__(cls, name, bases, kwargs):
kls = super().__new__(cls, name, bases, kwargs)
cls.subclasses.append(kls())
return kls

class Parent(metaclass=MetaParent):
pass

class ChildA(Parent):
pass

class ChildB(Parent):
pass

现在 MetaParent.subclasses 将拥有您的所有实例。如果需要,过滤掉 Parent 的实例:[cls for cls in MetaParent.subclasses if not type(Parent) == cls]

关于python - 如何在python中自动创建父类的所有子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65678649/

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