2016-01-20 66 views
2

我已經通過大量的關於如何在python中使用getattr函數的鏈接進行了搜索,並瞭解它可以用來調用函數,如下所示;Python - 如何使用getattr調用變量對象?

for attr in ['title', 'author']: 
    getattr(b, attr) 

這相當於;

b.title 
b.author 

我的問題是你如何動態引用一個對象; b

即我知道我會被調用函數some_function(),但對象可能是ab,或c。注a,b和c都是同一個類的一部分;只是不同的例子。

我將不知道,直到運行時,我將需要打電話。

+0

* A,B和C是相同的類的所有部分;只是不同的實例* ...對我來說不清楚... ...像其他類的實例一樣? –

+1

你怎麼知道你必須使用哪一個'a','b'或'c'? – Daniel

+1

最好的方法是不要使用名爲'a','b'和'c'的變量。相反,使用鍵爲「a」,「b」和「c」的字典。鐵拳; – BrenBarn

回答

0

我認爲「some_function」也將在運行時確定和名稱放入變量:

fname = 'some_function' 

for obj in objlist: 
    method = getattr(obj, fname, None) 
    if method is None: 
     continue 

    method() # you can also put this into a try block 

getattr上的obj爲您提供了一個綁定方法,這意味着它可以直接引用,並呼籲。

0

設置some_function一個obj參數,並且在使用getattr

def some_function(obg): 
    for attr in ['title', 'author']: 
     getattr(obj, attr)