我正在创建一个解析器,我想要做的是一个方法,它初始化在字典中指定的类的对象,然后在该类上调用方法。对象应该在运行时创建,其他每次调用此方法时。这很复杂,我认为一些伪代码会更好地解释它:
# some_method places intialized object in some list
dictionary_map = { 'foo': Bar.some_method, 'foo2': Bar2.some_method }
def parse_lines(lines):
for line in lines:
for key in dictionary_map:
if line.startswith(key): # checking if line matches dict value
dictionary_map[key](line)
我知道我可以通过这样的“自我”论证:
f = Bar()
dictionary_map['foo'](f)
但这不是我想要做的。字典很大,里面有很多类。我尝试过这样的事情:
dictionary_map = { 'foo': Bar.some_method(object.__new__(Bar)) }
但仅仅从看它我已经知道它不应该如何:)
答案 0 :(得分:1)
一种方法(如果我理解正确的话)将分别使用包含类和方法的元组:
dictionary_map = {'foo': (Bar, 'some_method'), 'foo2': (Bar2, 'some_method')}
然后你可以创建一个新的类实例并像这样调用它的方法:
cls, method = dictionary_map[key]
getattr(cls(), method)()
这意味着如果需要,您可以对实例执行更多操作。