如何在Python类中调用多个方法而不单独调用每个方法?

时间:2019-01-15 20:05:17

标签: python-3.x class methods

我有一个包含许多方法的类:

class PersonalDetails(ManagedObjectABC):
    def __init__(self, personal_details):
        self.personal_details = personal_details
    def set_gender(self):
        self.gender='Male:
    def set_age(self):
        self.set_age=22
    etc.

class PersonalDetails(ManagedObjectABC): def __init__(self, personal_details): self.personal_details = personal_details def set_gender(self): self.gender='Male: def set_age(self): self.set_age=22 etc. 我有很多这样的方法,所有的方法都以`set一词开头。我想在此类中创建一个新方法,该方法将执行以set开头的所有方法,如下所示:

但是,这会报告错误:

def execute_all_settings(self):
    '''
    wrapper for setting all variables that start with set.
    Will skip anything not matching regex '^set'
    '''
    to_execute=[f'''self.{i}()''' for i in dir(self) if re.search('^set',i)
    print(to_execute)
    [exec(i) for i in to_execute]

我该怎么做?

更多信息

我想这样做的原因,而不是简单地单独调用每个方法,是因为将来可能会添加新方法,所以我想执行所有方法(以“ set”开头的方法无论它们如何是)

1 个答案:

答案 0 :(得分:1)

请勿使用i+1exec。而是使用eval

还请注意,getattr既是方法又是属性,请尽量避免这种情况。

set_age

只要所有“设置”方法都不期望任何参数(这是当前用例),或者它们都期望使用相同的参数,则此解决方案将起作用。