【发布时间】:2019-01-15 20:05:16
【问题描述】:
我有一个包含许多方法的类:
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]
但是,这会报错:
NameError: name 'self' is not defined
我该怎么做呢?
更多信息
我想这样做而不是简单地单独调用每个方法的原因是将来可能会添加新方法,所以我想执行所有方法(以“set”开头,无论它们是什么是)
【问题讨论】:
-
exec不是eval。也不要对副作用使用理解。 -
我也试过
eval。结果相同。 -
属性优先于
set这样简单定义的方法 - stackoverflow.com/a/52201774/2308683 -
没有任何解释而投反对票的人能否提供一份?
标签: python-3.x class methods