为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

浮云间 2021-03-21 16:13:57
我有一个工厂函数,它定义了几个类并在列表中返回它们。是否有可能获得这样的列表,这些列表中的类以它们定义的顺序出现?以下工厂用于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'>]


查看完整回答
反对 回复 2021-03-30
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信