如何处理类中的属性但在python

时间:2017-05-15 18:44:38

标签: python-3.x class methods exec

对于一个需求,我需要能够使用给定的参数来创建新方法。例如,如果参数是['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'])

1 个答案:

答案 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__函数。