Как вызвать несколько методов класса в цикле? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть класс (называемый именем), который имеет следующие методы:

alex (), john (), claire (), charles (), luke (), richard (), jen () и т. Д.

Мне нужно вызывать все эти методы один за другим, например:

name.alex()
name.john()
name.claire()
name.charles()
name.luke()
name.richard()
name.jen()

... и т. Д.

я попытался создать список имен и вызвать все методы в цикле

names_list = ['alex', 'john, 'claire', 'charles', 'luke', 'richard', 'jen']

for i in range(len(names_list)):
    class_name.names_list[i]()

но этот способ вызова методов не работает. Есть ли способ вызвать несколько методов одного класса в цикле?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Конечно. Сохраните фактические методы:

name = YourClass()
methods = [name.alex,  name.john, name.claire ] # ...

for m in methods:
    m()

Я предполагаю, что у вас есть xy-проблема - то, что вы хотите сделать, это, вероятно, попытаться решить проблему, которую вы могли бы избежать, используя какой-либо другой вид дизайна.

Практически нецелесообразно иметь по 1 методу на имя, для приблизительно нескольких миллионов имен ...

1 голос
/ 01 апреля 2019

Если вы хотите сделать это таким образом, вы можете использовать getattr:

names_list = ['alex', 'john', 'claire', 'charles', 'luke', 'richard', 'jen']

for name in names_list:
    getattr(class_name, name)()

Обратите внимание, что это предполагает, что class_name является фактическим экземпляром вашего класса, или что эти методы staticmethods.В противном случае вам понадобится class_name().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...