我有一个工厂函数,它定义了几个类并在列表中返回它们。是否有可能获得这样的列表,这些列表中的类以它们定义的顺序出现?以下工厂用于locals()获取在其范围内定义的类,但locals()返回字典,因此没有确定的顺序。import inspectdef 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'>]
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
我已经遇到过几次这个问题。我的解决方案通常使用类装饰器将每个类显式添加到工厂。
我通常将工厂类的实例用作工厂。但是,如果您遇到一个简单的从list派生的工厂类,就足以实现您的目标:
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'>]
添加回答
举报
0/150
提交
取消