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