猿问

按照定义的顺序获取作用域中的对象

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


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


浮云间
浏览 140回答 1
1回答

白衣染霜花

我已经遇到过几次这个问题。我的解决方案通常使用类装饰器将每个类显式添加到工厂。我通常将工厂类的实例用作工厂。但是,如果您遇到一个简单的从list派生的工厂类,就足以实现您的目标:class Factory (list):&nbsp; &nbsp; def append(self, cls):&nbsp; &nbsp; &nbsp; &nbsp; super(Factory, self).append(cls)&nbsp; &nbsp; &nbsp; &nbsp; return clsfactory = Factory()@factory.appendclass Base (object):&nbsp; &nbsp; pass@factory.appendclass A (Base):&nbsp; &nbsp; pass@factory.appendclass B (Base):&nbsp; &nbsp; passprint factory运行此结果:[<class '__main__.Base'>, <class '__main__.A'>, <class '__main__.B'>]
随时随地看视频慕课网APP

相关分类

Python
我要回答