2015-08-30 39 views
3

這是我想做些什麼,但不知道是否有一種方法可以做到這一點:在循環中調用列表中的每個方法?

methods = [__add__, __sub__, __mul__] 

a = 3 
b = 4 

for m in methods: 
    print a.m(b) 

結果應該是:

7 
-1 
12 

我將如何做到這一點對於任何規模的名單,這在Python中稱爲什麼?

回答

5

做你想要做有什麼,你需要使用getattr

methods = ['__add__', '__sub__', '__mul__'] 

a = 3 
b = 4 

for m in methods: 
    print getattr(a, m)(b) 

但是,至少這個特殊的例子,這是更好地做到這一點:

from operator import add, mul, sub 

ops = [add, sub, mul] 

a = 3 
b = 4 

for op in ops: 
    print op(a, b) 
3

您可以使用getattr通過名稱調用方法:

methods = ['__add__', '__sub__', '__mul__'] 

a = 3 
b = 4 

for m in methods: 
    print getattr(a, m)(b)