Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.9如果字符串与类名匹配,则实例化该类(动态实例化特定类)_Python_Python 3.x_Python Class - Fatal编程技术网

Python 3.9如果字符串与类名匹配,则实例化该类(动态实例化特定类)

Python 3.9如果字符串与类名匹配,则实例化该类(动态实例化特定类),python,python-3.x,python-class,Python,Python 3.x,Python Class,如果字符串变量与类的名称匹配,我想实例化一个类。在类似的问题中,似乎存在一个依赖项,即在开始时就知道类的名称。在我的例子中,我只知道输入字符串将匹配一个类的名称。我想使用这个字符串来确定我需要实例化哪个类(在许多选项中)。即加载与字符串同名的类 如果string var==目录中的类(在模块文件中),则实例化该类。 我认为新的getattr会有所帮助,但这似乎是针对方法/函数而不是类本身。我还考虑了issubclass,但参数必须是类,而不是字符串。非常感谢您的任何建议 您应该明确定义一个接口,

如果字符串变量与类的名称匹配,我想实例化一个类。在类似的问题中,似乎存在一个依赖项,即在开始时就知道类的名称。在我的例子中,我只知道输入字符串将匹配一个类的名称。我想使用这个字符串来确定我需要实例化哪个类(在许多选项中)。即加载与字符串同名的类

如果string var==目录中的类(在模块文件中),则实例化该类。


我认为新的getattr会有所帮助,但这似乎是针对方法/函数而不是类本身。我还考虑了issubclass,但参数必须是类,而不是字符串。非常感谢您的任何建议

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

class Foo:
    ...

class Bar:
    ...

classes = {"foo": Foo, "bar": Bar}
cls_name = "foo"

obj = classes[cls_name]()
然后,您可以使用字符串在dict中查找适当的类(您将注意到,该字符串不必是类的名称):

谢谢必须删除(),因此最后的赋值是
obj=classes[cls\u name]
。我不能说我明白为什么,但它是这样工作的。