【问题标题】:Python 3.9 if a string matches a class name, instantiate the class (instantiate a specific class dynamically)Python 3.9 如果字符串与类名匹配,则实例化该类(动态实例化特定类)
【发布时间】:2021-04-18 22:38:30
【问题描述】:

如果字符串 var 与类名匹配,我想实例化一个类。在类似的问题中,似乎有一个依赖关系,即类的名称在一开始就已知。就我而言,我只知道输入字符串将匹配一个类的名称。我想使用字符串来识别我需要实例化的类(在许多选择中)。 IE。加载与字符串同名的类;

If string-var == a class (in a module file) in a directory, instantiate that class.

我认为新的 getattr 会有所帮助,但这似乎适用于方法/函数,而不是类本身。我也考虑过issubclass,但是参数需要是类,而不是字符串。任何建议都非常感谢!

【问题讨论】:

    标签: python python-3.x python-class


    【解决方案1】:

    您应该显式定义一个接口,将公开的字符串映射到对类的引用:

    class Foo:
        ...
    
    class Bar:
        ...
    
    classes = {"foo": Foo, "bar": Bar}
    

    然后您可以使用您的字符串在 dict 中查找适当的类(您会注意到,它不需要是类的名称):

    cls_name = "foo"
    
    obj = classes[cls_name]()
    

    【讨论】:

    • 谢谢!必须去掉 (),所以最后的赋值是obj = classes[cls_name]。不能说我明白为什么,但它是这样工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2019-11-08
    • 1970-01-01
    • 2014-10-09
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多