Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在python中,如何在类内部但在方法外部处理属性_Python 3.x_Class_Methods_Exec - Fatal编程技术网

Python 3.x 在python中,如何在类内部但在方法外部处理属性

Python 3.x 在python中,如何在类内部但在方法外部处理属性,python-3.x,class,methods,exec,Python 3.x,Class,Methods,Exec,对于一个需求,我需要能够使用给定的参数来创建新方法。例如,如果一个参数是['a','b'],我想遍历这个列表,并使用exec语句创建一个新方法例如: exec('def get_'+arg1+'(self):返回self.+arg1) 结果将是一个新的方法object.get_参数。我不知道如何在一个新方法之外访问对象属性,我也不认为可以在另一个方法内定义一个方法。任何帮助都将不胜感激 class Test(): def __init__(self,*args): sel

对于一个需求,我需要能够使用给定的参数来创建新方法。例如,如果一个参数是['a','b'],我想遍历这个列表,并使用exec语句创建一个新方法
例如:

exec('def get_'+arg1+'(self):返回self.+arg1)

结果将是一个新的方法object.get_参数。我不知道如何在一个新方法之外访问对象属性,我也不认为可以在另一个方法内定义一个方法。任何帮助都将不胜感激

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'])

要更改对象的属性,可以访问其
\uuuu dict\uuu
。此示例模仿了我认为您要求的内容,并将所有新属性设置为值
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中的一个属性。这些属性在您拥有实例之前不存在,因此在创建完类之前,您无法对它们执行任何操作。另外,您不需要Python中的getter,可能不应该使用
exec
。你想解决的实际问题是什么?