Python之Use isinstance() rather than type() for a typecheck.Pylint
Pylint 建议你使用
isinstance()
而不是
type()
进行类型检查。这是因为
isinstance()
更加灵活,可以处理继承和子类化的关系,而
type()
只能检查对象是否是特定的类型。
下面是一个例子说明为什么使用 isinstance()
是更好的选择:
class MyClass:
pass
obj = MyClass()
# 使用 type()
if type(obj) == MyClass:
print("obj is of type MyClass")
# 使用 isinstance()
if isinstance(obj, MyClass):
print("obj is of type MyClass")
在上面的例子中,两种方法都可以正确地检查 obj
是否是 MyClass
类型的实例。然而,当我们有一个继承自 MyClass
的子类 MySubClass
时,type()
会返回子类的实际类型,而 isinstance()
可以正确地检查对象是否是 MyClass
或其子类的实例:
class MySubClass(MyClass):
pass
obj_sub = MySubClass()
# 使用 type()
if type(obj_sub) == MySubClass:
print("obj_sub is of type MySubClass") # 将打印 "obj_sub is of type MySubClass"
# 使用 isinstance()
if isinstance(obj_sub, MyClass):
print("obj_sub is of type MyClass or its subclass") # 将打印 "obj_sub is of type MyClass or its subclass"
因此,使用 isinstance()
可以使你的代码更加灵活和可扩展,特别是当你处理可能有子类的自定义类型时。