假設你開始喜歡的東西:
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
,而不管它是否繼承自已經明確處理的類。
或'if isinstance(x,Mammal):',它更好地處理繼承 – jonrsharpe