1

我有一个工厂函数,它定义了几个类并在列表中返回它们。是否可以获得这样的列表,其中类按照定义的顺序出现?

以下工厂用于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'>]
4

1 回答 1

1

我遇到过这个问题几次。我的解决方案通常使用类装饰器将每个类显式添加到工厂。

我通常使用工厂类的实例作为工厂。但是,如果您的情况是从 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'>]
于 2013-06-05T15:40:17.560 回答