Как вызвать несколько методов в классе Python, не вызывая каждый по отдельности?

Используйте утверждение границы слова \b:

/\bme\b/
-1
задан Josh 15 January 2019 в 20:05
поделиться

1 ответ

Не используйте exec или eval. Вместо этого используйте getattr.

Также обратите внимание, что set_age является одновременно методом и атрибутом, постарайтесь избежать этого.

import re

class PersonalDetails:
    def __init__(self, personal_details):
        self.personal_details = personal_details

    def set_gender(self):
        self.gender = 'Male'

    def set_age(self):
        self.age = 22

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

pd = PersonalDetails('') 
pd.execute_all_settings() 
print(pd.gender)
# ['set_age', 'set_gender']
# Male

Это решение будет работать до тех пор, пока все методы «set» либо не ожидают никаких аргументов (что является текущим вариантом использования), либо все они ожидают одинаковых аргументов.

0
ответ дан DeepSpace 15 January 2019 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: