通过字符串引用类名?

max*_*max 1 python string class

我需要解析一些文本文件,为文本中遇到的各种实体创建对象,并将它们放在一些数据结构(例如,列表)中以供进一步处理.文字示例:

laptop
 17" dell, weight: 12 lb
desktop
 24" hp
Run Code Online (Sandbox Code Playgroud)

我事先知道文本中可能存在哪些实体,以及它们应该具有哪些属性.在这个例子中,我已经定义了笔记本电脑和桌面类(可能是类计算机的子类).解析器只需要创建对象laptop('dell',17,12)和dekstop('hp',24).

如果我遵循这条路线,我需要从字符串中检索类名,并创建这些类的对象.这是Pythonic的做事方式吗?如果是这样,最好的方法是什么(使用Python 3.1)?如果没有,我该怎么办呢?

谢谢!

什么

Kat*_*iel 11

如果在类中定义了类computers.py,那么你可以这样做

import computers
getattr( computers, "Laptop" )( <params> )
Run Code Online (Sandbox Code Playgroud)

实例化一个computers.Laptop.如果它们是在您运行代码的同一文件中定义的(因此它们是全局变量),您可以这样做

globals()[ "Laptop" ]
Run Code Online (Sandbox Code Playgroud)

但这不那么优雅; 将它们放在一个单独的范围内会更好.

或者,如果你想要一个更强大的映射(比如你想要"Nettop","Lapbook"和"Laptop"都要实例化Laptop),你可以保持字符串到它们相应的构造函数的映射,并使用它:

mapping = { "Laptop": Laptop, "Nettop": Laptop, ... }
mapping[ "Laptop" ]()
Run Code Online (Sandbox Code Playgroud)


Nik*_*ohl 5

您可以使用以下代码按名称创建类的实例

obj = globals()[classname]()
Run Code Online (Sandbox Code Playgroud)

哪里classname是一个字符串