对于一个需求,我需要能够使用给定的参数来创建新方法。例如,如果参数是['a','b'],我想迭代这个列表并使用exec语句创建一个新方法。
例如:
exec('def get _'+ arg1 +'(self):return self。'+ arg1)
结果将是一个新方法object.get_argument。我无法弄清楚如何在新方法之外访问对象属性,我认为你不能在另一个方法中定义一个方法。任何帮助将不胜感激。
class Test():
def __init__(self,*args):
self.args = args
for arg in self.args
exec('def get_'+ arg +'(self): return self.' + arg)
foo = Test(['a','b','c'])
答案 0 :(得分:0)
要更改对象的属性,您可以访问其__dict__
。此示例模仿我认为您要求的内容,并将所有新属性设置为值None
。但希望它能让这个想法变得清晰。
class Test():
def __init__(self,*args):
for arg in args:
self.__dict__[arg]=None
self.__dict__['get_'+arg]=lambda :self.__getattribute__(arg)
foo=Test('a','b','c')
foo.b
foo.get_a()
您可以在方法中定义一个完整的函数,然后将该函数分配给lambda
self.__dict__
函数。