我想在模型中检索一个类的名称。可以使用__class__
魔法来实现。如何将其包装在if statement
中,以便我为它们做一些必要的操作。
说,lst = [<mammal>, <fish>, <amphibian>, <mamaal>]
然后
if <mammal>:
# do this
elif <fish>:
# do fish
else:
# do other
我知道这不是一个很好的做事方式,但我想这是最佳拍摄方式。任何帮助将非常感激。谢谢!
答案 0 :(得分:4)
我不确定你的用例是什么,但似乎你没有以最好的方式做到这一点。您应该将逻辑放入类中,而不是检查类型并为每个类型执行特定的操作:每个类应定义do_stuff
方法,然后您只需调用animal.do_stuff()
。
答案 1 :(得分: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):
...
然后
isinstance(Bat(), Mammal) == True
或者,更多的Pythonic("EAFP")方法是使用try
来处理某些animal
不支持你所做的事情的情况尝试用它们,例如:
for animal in animals:
try:
animal.fly(destination)
except AttributeError:
animal.walk(destination)
这样,如果你添加另一个新类:
class Bird:
...
只要新类实现fly
和/或walk
,您的代码仍然有效,无论它是否继承自您已经明确处理过的类。