我有一个工厂函数,它定义了几个类并在列表中返回它们。是否有可能获得这样一个列表,其中类按照它们的定义顺序出现?
以下工厂使用locals()
来获取其范围中定义的类,但locals()
返回一个字典,因此没有明确的排序。
import inspect
def factory() :
class Base(object):
pass
class A(Base):
pass
class B(Base):
pass
class C(Base):
pass
local_classes = [obj for obj in locals().values() if inspect.isclass(obj)]
return [cls for cls in local_classes if issubclass(cls, Base)]
factory()
# [<class '__main__.A'>, <class '__main__.Base'>, <class '__main__.C'>, <class '__main__.B'>]
所需的输出是
# [<class '__main__.Base'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>]
答案 0 :(得分:1)
我偶然遇到过这个问题。我的解决方案通常使用类装饰器将每个类显式添加到工厂。
我通常使用工厂类的实例作为工厂。但是,如果您认为从列表派生的简单工厂类可能足以实现您的目标:
class Factory (list):
def append(self, cls):
super(Factory, self).append(cls)
return cls
factory = Factory()
@factory.append
class Base (object):
pass
@factory.append
class A (Base):
pass
@factory.append
class B (Base):
pass
print factory
运行此产生:
[<class '__main__.Base'>, <class '__main__.A'>, <class '__main__.B'>]