2016-06-14 50 views
0

我已經定義的類Field。我還定義AB,這是Field子類。識別類的屬性類型,並調用其功能

現在我已經定義的其他類Tool。它可以包含類變量,它可以是類型類Field,或其它類,或正常可變的。如果變量類型爲Field,則請致電fun1並收集結果。

請提出任何辦法,我可以做的。我對面向對象編程非常陌生。

class Field(object): 
    def fun1(self): 
    return 'Field' 

class A(Field): 
    def fun1(self): 
    return 'A fun1' 

class B(Field): 
    def fun1(self): 
    return 'B fun1' 

class Tool(object): 
    a1 = A() 
    b1 = B() 
    c1 = 'abc' 

    def fun1(self): 
    all_attributes = dir(self) 
    result_list = [] 
    for attribute in all_attributes: 
     if attribute is of type Field: 
     result_list.append(attribute.fun1()) 
    return return_list 

回答

1

我認爲你正在尋找的isinstance內置:

if isinstance(attribute, Field): 
    ... 

或可能:

if isinstance(getattr(self, attribute), Field): 
    ... 

因爲它看起來像attribute可在屬性的字符串名稱您碼。

需要指出的是,一般來說,最好是構造數據,使其包含所有同類型。那麼你不需要做任何類型檢查等 - 儘管很難說這個建議是否有助於你在問題中發佈的通用示例代碼。

+0

但是,當我使用DIR()他們都是字符串類型得到的屬性列表如何,我知道它的類型 –

+0

@ Rohit.nib - 對,我爲什麼說這是這裏很難給出建議。反思「自我」的屬性有點奇怪。通常你想提前知道屬性是什麼(及其類型)。 – mgilson

+0

我剛剛寫了一個sudo代碼,只是爲了解釋我需要什麼。我們可以採取其他方式嗎?我只是想執行obj的功能取決於它的類型 –