将可用类的dict传递给函数

时间:2018-03-13 09:41:44

标签: python

我想将带有可用类的dict传递给函数,以便我可以使用它们的名称构造它们,而无需导入它们。

我的想法是这样做:

from construct_classes import construct_classes

class A:
    def __init__(self):
        print('A')

class B:
    def __init__(self):
        print('B')

if __name__ == '__main__':
    construct_classes({'A': A, 'B': B})

在construct_classes.py中:

def construct_classes(my_classes):
    a = my_classes['A'].__init__(my_classes['A'])
    b = my_classes['B'].__init__(my_classes['B'])

这似乎有效,但对我来说看起来很丑陋。

有没有反对使用它的论据,如果有,还有另一种方法可以实现这种行为吗?

1 个答案:

答案 0 :(得分:0)

根据我对你的问题的看法,这就是我的想法:

如果它看起来很丑陋,也许就是这样。但也可能因为__init__调用而发生了downvotes(遵循Klaus评论修正)。

我不记得使用像“插件地图”或“插件字典”这样的表达,尽管我们知道这样的生物可以存在。现在,如果你说“已安装的插件列表”,那么另外一件事,如果你看到我的意思......

如果您只是想在不触及某些类代码的情况下添加功能,请使用Decorator模式(即Python装饰器)。

如果要为用户或客户端代码构建插件列表以供选择和运行,则需要抽象出一个用于插件管理和使用的通用API。这样您就可以从使用.list()获得的列表中进行选择,或者迭代列表,例如.run()中的任何一个。

同时检查命名空间包。不要认为它直接适用于此,但插件似乎主要是名称管理问题,也许你可以用不同的方式构建插件的想法,然后充分利用它。它们只是具有通用名称且没有__init__.py的子文件夹,将其中定义的名称/模块放入一个共同的顶级名称。