自学内容网 自学内容网

Python issubclass和isinstance函数:检查类型

在Python中,issubclass 和 isinstance 是两个用于检查类型关系的内置函数。它们的主要区别在于检查的对象类型不同:

issubclass(class, classinfo):

用途:检查一个类是否是另一个类的子类(或是否实现了某个接口)。
参数:
class:要检查的类。
classinfo:可以是单个类或者一个包含类的元组,用于检查class是否是这些类的子类。
返回值:如果class是classinfo的子类(或相同类),则返回True;否则返回False。
示例:

class A:  
    pass  
 
class B(A):  
    pass  
 
print(issubclass(B, A))  # 输出: True  
print(issubclass(A, B))  # 输出: False  
print(issubclass(B, B))  # 输出: True  
print(issubclass(B, (A, int)))  # 输出: True,因为B是A的子类

isinstance(object, classinfo):

用途:检查一个对象是否是某个类的实例或者是否是某个类的子类的实例。
参数:
object:要检查的对象。
classinfo:可以是单个类或者一个包含类的元组,用于检查object是否是这些类的实例。
返回值:如果object是classinfo的实例(或子类实例),则返回True;否则返回False。
示例:

class A:  
    pass  
 
class B(A):  
    pass  
 
obj_a = A()  
obj_b = B()  
 
print(isinstance(obj_a, A))  # 输出: True  
print(isinstance(obj_b, A))  # 输出: True,因为obj_b是A的子类B的实例  
print(isinstance(obj_b, B))  # 输出: True  
print(isinstance(obj_a, (A, B)))  # 输出: True,因为obj_a是A的实例  
print(isinstance(obj_b, (A, int)))  # 输出: True,因为obj_b是A的子类B的实例

注意事项

issubclass 只能用于类对象,不能用于实例对象。
isinstance 可以用于实例对象和类对象(在用于类对象时,相当于检查该类是否是给定类的子类)。
示例对比

class Animal:  
    pass  
  
class Dog(Animal):  
    pass  
  
dog = Dog()  
  
# 使用 issubclass  
print(issubclass(Dog, Animal))  # True  
print(issubclass(Animal, Dog))  # False  
  
# 使用 isinstance  
print(isinstance(dog, Dog))     # True  
print(isinstance(dog, Animal))  # True  
print(isinstance(Dog, Animal))  # True,这里检查的是类对象,因为Dog是Animal的子类

这两个函数在面向对象编程中非常有用,特别是在需要确保对象类型符合特定要求时。


原文地址:https://blog.csdn.net/m0_65482549/article/details/143804768

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!