python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python isinstance() insubclass()

python中isinstance()和insubclass()的实现

作者:sonrisa_

本文主要介绍了python中isinstance()和insubclass()的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

​​isinstance()和issubclass()的功能与用法​​

​​1.isinstance(obj, classinfo)​​

​功能​​:检查对象 obj 是否是 classinfo 类(或其子类)的实例。
​返回值​​:TrueFalse
​用法​​:

class Animal: pass
class Dog(Animal): pass
 
dog = Dog()
print(isinstance(dog, Dog))    # True(直接类)
print(isinstance(dog, Animal)) # True(父类)
print(isinstance(dog, str))   # False(无关类)

​特点​​:

支持检查多个类(元组形式):

print(isinstance(dog, (Dog, Animal, str))) # True(匹配任一即可)

适用于动态类型校验(如函数参数验证)。

​​2.issubclass(cls, classinfo)​​

​功能​​:检查类 cls 是否是 classinfo 的子类(或自身)。
​返回值​​:TrueFalse
​用法​​:

class Animal: pass
class Dog(Animal): pass
 
print(issubclass(Dog, Animal))  # True(子类)
print(issubclass(Dog, Dog))     # True(自身)
print(issubclass(Dog, object))  # True(所有类继承自 object)
print(issubclass(Animal, Dog))  # False

​特点​​:

同样支持元组检查多类:

print(issubclass(Dog, (Animal, str)))  # True

常用于类关系设计或框架中约束继承关系。

​​核心区别​​

​​函数​​​​作用对象​​​​检查目标​​​​典型场景​​
isinstance()对象 (obj)是否是某类的实例运行时类型验证
issubclass()类 (cls)是否是某类的子类设计时继承关系校验

​示例场景​​:

def process_animal(animal):
    if not isinstance(animal, Animal):
        raise TypeError("必须传入 Animal 或其子类实例")
    # 处理逻辑...
 
class Bird(Animal): pass
process_animal(Bird())  # 通过
process_animal("abc")   # 报错

到此这篇关于python中isinstance()和insubclass()的实现的文章就介绍到这了,更多相关python isinstance() insubclass()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文