跳到内容

类型比较 (E721)

源自 pycodestyle linter。

作用

检查使用 == 和其他比较运算符进行对象类型比较的情况。

为什么这不好?

与直接类型比较不同,isinstance 还会检查对象是否是类或其子类的实例。

如果要检查精确的类型匹配,请使用 isis not

已知问题

当使用覆盖 == (__eq__) 运算符的库(例如 NumPy、Pandas 和 SQLAlchemy)时,此规则可能会产生误报,因为从 == 转换为 isis not 会改变代码的行为。

例如,以下操作等效

import numpy as np

np.array([True, False]) == False
# array([False,  True])

np.array([True, False]) is False
# False

示例

if type(obj) == type(1):
    pass

if type(obj) == int:
    pass

建议改为

if isinstance(obj, int):
    pass