2014-04-22 20 views
0

我想檢索模型中類的名稱。可以通過__class__魔法實現。我如何將它包裝在if statement中,以便我爲他們做一些必要的操作。獲取類的名稱並將其包裝在if語句中

說,lst = [<mammal>, <fish>, <amphibian>, <mamaal>]然後

if <mammal>: 
    # do this 
elif <fish>: 
    # do fish 
else: 
    # do other 

我知道這不是做事的一個很好的方式,但我想這將是最好的拍攝。任何幫助將非常感激。謝謝!

+2

或'if isinstance(x,Mammal):',它更好地處理繼承 – jonrsharpe

回答

3

假設你開始喜歡的東西:

class Mammal: 
    ... 

class Amphibian: 
    ... 

class Fish: 
    ... 

animals = [Mammal(), Amphibian(), Fish()] 

您可以篩選的animals處理的類,如下所示:

for animal in animals: 
    if isinstance(animal, Mammal): 
     ... 
    elif isinstance(animal, Fish): 
     ... 
    else: 
     ... 

isinstance支持繼承,所以如果你有一個新的子類:

class Bat(Mammal): 
    ... 

then

isinstance(Bat(), Mammal) == True 

另外,一個更Python("EAFP")的方法是使用try處理的情況下,一些animal■不要支持你想要什麼與他們無關,如:

for animal in animals: 
    try: 
     animal.fly(destination) 
    except AttributeError: 
     animal.walk(destination) 

這樣一來,如果添加另一個新類:

class Bird: 
    ... 

你的代碼仍然有效只要新類實現了fly和/或walk,而不管它是否繼承自已經明確處理的類。

4

我不確定你的用例是什麼,但好像你沒有以最好的方式去做。而不是檢查類型併爲每個類型專門做一些事情,您應該將邏輯放入類中:每個類應該定義一個do_stuff方法,然後您可以簡單地調用animal.do_stuff()

+0

是的。我知道這不是最好的方法。但想不出有什麼辦法。謝了哥們。 –

+0

好吧,我建議更好的方法:將邏輯移入類。 –