首页 > 解决方案 > Python反射,方法的getter

问题描述

class A:
    def __init__(self):
        self.var = 10
    def print(self):
        print("hiiiiii")

对于 A 的对象,我们可以使用getattr和轻松访问属性setattr。Python中有没有办法拥有一个类的实例和一个方法名并间接调用它,比如:

MagicalMethod( A(), "print" )

然后为我打印“hiiiiii”。

标签: pythonreflectiongetattrsetattr

解决方案


那将是getattr

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

(请注意,您仍然必须调用的返回值getattr;您可以定义一个包装器来为您执行此操作:

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

)

operator.methodcaller提供了一种稍微不同的间接方式。

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

推荐阅读