在類的成員函數中,若是你想經過一個字符串(成員函數名)來調用類的成員函數,該怎麼作?函數
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"
對於上面的類,你能夠這樣用code
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,也是同一個道理。
若是像下面這樣寫的話,會出錯get
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)
這個基本上指明瞭緣由。it