我有一个包含许多方法的类:
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”开头的方法无论它们如何是)
答案 0 :(得分:1)
请勿使用i+1
或exec
。而是使用eval
。
还请注意,getattr
既是方法又是属性,请尽量避免这种情况。
set_age
只要所有“设置”方法都不期望任何参数(这是当前用例),或者它们都期望使用相同的参数,则此解决方案将起作用。