У меня есть класс, который содержит несколько методов:
</p>
<pre><code>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», независимо от того, что они есть)