Skip to main content
 首页 » 编程设计

python之通过字符串引用类名

2025年05月04日21dyllove98

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

laptop 
 17" dell, weight: 12 lb 
desktop 
 24" hp 

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

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

谢谢!

什么

请您参考如下方法:

如果类在 computers.py 中定义,比如说,你可以这样做

import computers 
getattr( computers, "Laptop" )( <params> ) 

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

globals()[ "Laptop" ] 

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

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

mapping = { "Laptop": Laptop, "Nettop": Laptop, ... } 
mapping[ "Laptop" ]()