按名称调用Python方法

Jaz*_*azz 67 python

如果我在字符串中有对象和方法名称,我该如何调用该方法?

class Foo:
    def bar1(self):
        print 1
    def bar2(self):
        print 2

def callMethod(o, name):
    ???

f = Foo()
callMethod(f, "bar1")
Run Code Online (Sandbox Code Playgroud)

Enr*_*sso 97

容易一个:

class Foo:
    def bar1(self):
        print 1
    def bar2(self):
        print 2

def callMethod(o, name):
    getattr(o, name)()


f = Foo()
callMethod(f, "bar1")
Run Code Online (Sandbox Code Playgroud)

看看getattr

您还可以使用setattr按名称设置Class属性.


Yar*_*hiy 5

我有类似的问题,想通过引用调用实例方法.这是我发现的有趣的事情:

instance_of_foo=Foo()

method_ref=getattr(Foo, 'bar')
method_ref(instance_of_foo) # instance_of_foo becomes self

instance_method_ref=getattr(instance_of_foo, 'bar')
instance_method_ref() # instance_of_foo already bound into reference
Run Code Online (Sandbox Code Playgroud)

Python太神奇了!