使用Python`isinstance`是对的吗?

Nam*_*nge 6 python oop dynamic instance

我有一个不同块的2D数组,都继承自Block.我想检查我点击的块是否是污垢类型块,如下所示:

clickedblock = getClickedBlock()

if isinstance(clickedblock, Dirt):
    place a block

else:
    don't place a block
Run Code Online (Sandbox Code Playgroud)

我听说这isinstance很糟糕,应该避免,因为它会在代码中创建分叉.什么时候使用会isinstance很好?

对我的问题另一个更麻烦的解决方案是使用一个名为'id'的Block字段,然后检查它是否等于某个常量,这意味着Dirt.但这听起来很糟糕,而且比错误更容易出错isinstance.

Imr*_*ran 6

您的示例似乎是一个合法的用例isinstance().

这并不isinstance()坏,通常多态可以用于相同的目的(这导致使用类的更清晰的代码).

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