| by YoungTimes | No comments

Python中type()和isinstance()的区别

Python中的每个对象(object)都有一个数据类型,它可能是内置的类型,如int、str、numpy array等;也可能是自定义类的对象。

type(obj)返回obj的数据类型;isinstance(obj, dtype)用于检测obj是否是dtype的实例,如果为dtype的实例返回True,反之返回False。

它们的区别在于isinstance()考虑继承关系,但是type()==dtype不考虑继承关系。

如下代码,Rectangle类继承自shape类,Square类继承自Rectangle类。

class Shape:
    pass

class Rectangle(Shape):
    def __init__(self, length, width):
        self.length = length
        self.width = width
        self.area = length * width
    
    def get_area(self):
        return self.length * self.width
        
class Square(Rectangle):
    def __init__(self,length):
        Rectangle.__init__(self,length,length)

定义一个Square对象,分布调用type()和isinstance()方法。

a = Square(5)

type(a) == Rectangle
isinstance(a, Rectangle)

type(a) == Rectangle返回False,isinstance(a, Rectangle)返回True。

参考材料

https://towardsdatascience.com/difference-between-type-and-isinstance-in-python-47fae6fbb068

发表评论