Python: вызов всех методов объекта с заданным набором аргументов - PullRequest
5 голосов
/ 07 декабря 2010

Я хотел бы вызвать все методы экземпляра объекта Python с заданным набором аргументов, т.е. для объекта, подобного

class Test():
    def a(input):
        print "a: " + input
    def b(input):
        print "b: " + input
    def c(input):
        print "c: " + input

Я хотел бы написать динамический метод, позволяющий мне запускать1004 *

myMethod('test')

, что приводит к

a: test
b: test
c: test

путем итерации по всем методам test ().Заранее спасибо за помощь!

Ответы [ 2 ]

11 голосов
/ 07 декабря 2010

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

Использование inspect и dir.

from inspect import ismethod

def call_all(obj, *args, **kwargs):
    for name in dir(obj):
        attribute = getattr(obj, name)
        if ismethod(attribute):
            attribute(*args, **kwargs)

class Test():
    def a(self, input):
        print "a: " + input
    def b(self, input):
        print "b: " + input
    def c(self, input):
        print "c: " + input

call_all(Test(), 'my input')

Выход:

a: my input
b: my input
c: my input
1 голос
/ 07 декабря 2010

Вы действительно не хотите этого делать.Python поставляется с двумя очень хорошими средами тестирования: см. Модули unittest и doctest в документации.

Но вы можете попробовать что-то вроде:

def call_everything_in(an_object, *args, **kwargs):
    for item in an_object.__dict__:
        to_call = getattr(an_object, item)
        if callable(to_call): to_call(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...