Python отражение, геттер методов - PullRequest
0 голосов
/ 03 августа 2020
class A:
    def __init__(self):
        self.var = 10
    def print(self):
        print("hiiiiii")

Для объекта A мы можем легко получить доступ к атрибутам с помощью getattr и setattr. Есть ли способ в Python иметь экземпляр класса и имя метода и вызывать его косвенно, например:

MagicalMethod( A(), "print" )

, а затем печатает "hiiiiii" для меня.

1 Ответ

0 голосов
/ 03 августа 2020

Это будет getattr:

>>> getattr(A(), 'print')()
hiiiiii

(Обратите внимание, что вам все равно нужно вызвать возвращаемое значение getattr; вы можете определить оболочку для этого для you:

def MagicalMethod(obj, name, *args, **kwargs):
    return getattr(obj, name)(*args, **kwargs)

)

operator.methodcaller обеспечивает несколько иной вид косвенного обращения.

>>> from operator import methodcaller
>>> f = methodcaller('print')
>>> f(A())
hiiiiii
...