??isinstance()
和 issubclass()
的功能與用法??
??1. isinstance(obj, classinfo)
??
??功能??:檢查對象 obj
是否是 classinfo
類(或其子類)的實例。
??返回值??:True
或 False
。
??用法??:
class Animal: pass
class Dog(Animal): passdog = 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
的子類(或自身)。
??返回值??:True
或 False
。
??用法??:
class Animal: pass
class Dog(Animal): passprint(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") # 報錯