通过名称调用Python方法

99 投票
5 回答
85929 浏览
提问于 2025-04-16 03:01

如果我有一个对象和一个方法名是以字符串形式存在的,我该怎么调用这个方法呢?

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

def callMethod(o, name):
    ???

f = Foo()
callMethod(f, "bar1")

5 个回答

3
getattr(globals()['Foo'](), 'bar1')()
getattr(globals()['Foo'](), 'bar2')()

不需要先创建 Foo 的实例!

11

我之前也有类似的问题,想通过引用来调用实例方法。这里有一些有趣的发现:

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

Python真是太棒了!

135

使用内置的 getattr() 函数:

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

def call_method(o, name):
    return getattr(o, name)()


f = Foo()
call_method(f, "bar1")  # prints 1

你还可以使用 setattr() 来通过名字设置类的属性。

撰写回答