O problema de usar soluções como reflection
, tal como apontado por @Capezotte é que na verdade você não quer chamar todos os métodos de uma classe. De uma olhada em todos os métodos da sua classe:
from typing import Callable
class Myclass:
casa = '12'
def method1():
...
def method2():
...
def methodn():
...
my_class = Myclass()
[func_name for func_name in dir(my_class)
if isinstance(getattr(my_class, func_name), Callable)]
['__class__',
'__delattr__',
'__dir__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'method1',
'method2',
'methodn']
Vai depender do real problema, mas talvez você queira algo como:
from typing import List, Callable, Optional
class MyClass:
def __init__(self):
self._all_executor_methods = [
self.method1,
self.method2,
self.methodn
]
def run(self, extra_methods: List[Callable] = []):
results = []
extended = [*extra_methods, *self._all_executor_methods]
for method in extended:
results.append(method())
return results
def method1(self):
print('a')
def method2(self):
print('b')
def methodn(self):
print('c')
my_class = MyClass()
my_class.run()
Perceba que a ordem dos métodos pode importar.
Pode ser ainda que você esteja em busca de alguns conceitos do paradigma funcional
:
from typing import Any, List, Callable, Optional
def method1() -> Callable:
def _method1(executor: Executor) -> None:
print('a')
return _method1
def method2() -> Callable:
def _method2(executor: Executor) -> None:
print('b')
return _method2
def methodn(a, b, c) -> Callable:
def _methodn(executor: Executor) -> None:
executor.math_result = a*b/c
print(executor.math_result)
return _methodn
class Executor:
def run(self, *methods: List[Callable]) -> List[Any]:
results = []
for method in methods:
results.append(method(self))
return results
executor = Executor()
executor.run(
method1(),
method2(),
methodn(12,22,11)
)
executor.math_result
código no Google Colab
De bonus os exemplos fazem uso de type hinting
, se você planeja programar algo relativamente grande, tipagem é indispensável.