我有一个由不同块组成的2D数组,所有块均继承自Block。我要检查单击的块是否为污垢类型块,如下所示:

clickedblock = getClickedBlock()

if isinstance(clickedblock, Dirt):
    place a block

else:
    don't place a block

我听说isinstance不好,应该避免使用,因为它会在代码中创建派生。什么样的时间isinstance会很好用?

解决我的问题的另一个更麻烦的方法是拥有一个名为“id”的Block字段,然后检查它是否等于某个意味着Dirt的常数。但这听起来很糟糕,而且比简单的isinstance更容易出错。

最佳答案

您的示例似乎是isinstance()的合法用例。

并不是isinstance()不好,通常可以将多态用于相同的目的(这会在使用类的地方产生更清晰的代码)。

但是有时候,您需要isinstance()。例如,检测变量是否为字符串的pythonic方法是isinstance(var, basestring)

关于python - 使用Python `isinstance`正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13636149/

10-12 05:15