在类的成员函数中,如果你想通过一个字符串(成员函数名)来调用类的成员函数,该怎么做?
class A:
val = 1
def __init__(self):
pass
def fun_1(self):
print self.val
print "in fun_1"
def fun_2(self):
print "in fun_2"
对于上面的类,你可以这样用
obj = A()
s = 'fun_1'
fn = getattr(obj, s)
fn()
但是如果你传给getattr的第一个参数是对象名,那么就要这样用
obj = A()
s = 'fun_1'
fn = getattr(A, s)
fn(obj)
相当于是fn只是一个函数名,需要一个调用参数,第一个参数就是self,也就是对象实例。
在类成员函数中,可以这样用
class A:
val = 1
def __init__(self):
pass
def control(self):
name = 'fun_1'
fn = getattr(A, name)
fn(self)
def fun_1(self):
print self.val
print "in fun_1"
def fun_2(self):
print "in fun_2"
看上面的成员函数control,也是同一个道理。
如果像下面这样写的话,会出错
def control(self):
name = 'fun_1'
fn = getattr(A, name)
fn()
报错信息就是
TypeError: unbound method fun_1() must be called with A instance as first argument (got nothing instead)
这个基本上指明了原因。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。