Встроенная dir
перечислит все атрибуты объекта, например:
>>> class MyClass:
... def one(self):
... print "one"
... def two(self):
... print "two"
... def three(self):
... print "three"
...
>>> dir(MyClass)
['__doc__', '__module__', 'one', 'three', 'two']
Он также работает в инициализированном классе.
>>> c = MyClass()
>>> dir(c)
['__doc__', '__module__', 'one', 'three', 'two']
Методы - это просто атрибуты, которые могут вызываться (через c.attribute()
) - мы можем использовать функцию getattr
для ссылки на этот метод через переменную.
>>> myfunc = getattr(c, 'one')
>>> myfunc
<bound method MyClass.one of <__main__.MyClass instance at 0x7b0d0>>
Тогда мы можем просто вызвать эту переменную ..
>>> myfunc()
one # the output from the c.one() method
Поскольку некоторые атрибуты не являются функциями (в приведенном выше примере __doc__
и __module__
). Мы можем использовать встроенную функцию callable , чтобы проверить, является ли она вызываемым методом (функцией):
>>> callable(c.three)
True
>>> callable(c.__doc__)
False
Итак, чтобы объединить все это в цикл:
>>> for cur_method_name in dir(c):
... the_attr = getattr(c, cur_method_name)
... if callable(the_attr):
... the_attr()
...
one
three
two
Помните, что это вызовет методы, такие как __init__
снова, что, вероятно, нежелательно. Вы можете пропустить любые cur_method_name
, начинающиеся с подчеркивания