網站首頁 編程語言 正文
Python 提供了如下兩個函數來檢查類型:
- issubclass(cls, class_or_tuple):檢查 cls 是否為后一個類或元組包含的多個類中任意類的子類。
- isinstance(obj, class_or_tuple):檢查 obj 是否為后一個類或元組包含的多個類中任意類的對象。
通過使用上面兩個函數,程序可以方便地先執行檢查,然后才調用方法,這樣可以保證程序不會出現意外情況。
如下程序示范了通過這兩個函數來檢查類型:
# 定義一個字符串
hello ="Hello";
# "Hello"是str類的實例,輸出True
print('"Hello"是否是str類的實例: ',isinstance(hello, str))
# "Hello"是object類的子類的實例,輸出True
print('"Hello"是否是object類的實例: ',isinstance(hello, object))
# str是object類的子類,輸出True
print('str是否是object類的子類: ',issubclass(str, object))
# "Hello"不是tuple類及其子類的實例,輸出False
print('"Hello"是否是tuple類的實例: ',isinstance(hello, tuple))
# str不是tuple類的子類,輸出False
print('str是否是tuple類的子類: ',issubclass(str, tuple))
# 定義一個列表
my_list =[2,4]
# [2, 4]是list類的實例,輸出True
print('[2, 4]是否是list類的實例: ',isinstance(my_list, list))
# [2, 4]是object類的子類的實例,輸出True
print('[2, 4]是否是object類及其子類的實例: ',isinstance(my_list, object))
# list是object類的子類,輸出True
print('list是否是object類的子類: ',issubclass(list, object))
# [2, 4]不是tuple類及其子類的實例,輸出False
print('[2, 4]是否是tuple類及其子類的實例: ',isinstance([2,4], tuple))
# list不是tuple類的子類,輸出False
print('list是否是tuple類的子類: ',issubclass(list, tuple))
通過上面程序可以看出,issubclass() 和 isinstance() 兩個函數的用法差不多,區別只是 issubclass() 的第一個參數是類名,而 isinstance() 的第一個參數是變量,這也與兩個函數的意義對應:issubclass 用于判斷是否為子類,而 isinstance() 用于判斷是否為該類或子類的實例。
issubclass() 和 isinstance() 兩個函數的第二個參數都可使用元組。例如如下代碼:
data =(20,'fkit')
print('data是否為列表或元組: ',isinstance(data,(list, tuple)))# True
# str不是list或者tuple的子類,輸出False
print('str是否為list或tuple的子類: ',issubclass(str,(list, tuple)))
# str是list或tuple或object的子類,輸出True
print('str是否為list或tuple或object的子類 ',issubclass(str,(list, tuple, object)))
此外,Python 為所有類都提供了一個 __bases__ 屬性,通過該屬性可以查看該類的所有直接父類,該屬性返回所有直接父類組成的元組。例如如下代碼:
class A:
pass
class B:
pass
classC(A, B):
pass
print('類A的所有父類:', A.__bases__)
print('類B的所有父類:', B.__bases__)
print('類C的所有父類:', C.__bases__)
運行上面程序,可以看到如下運行結果:
類A的所有父類: (<class 'object'>,)
類B的所有父類: (<class 'object'>,)
類C的所有父類: (<class '__main__.A'>, <class '__main__.B'>)
從上面的運行結果可以看出,如果在定義類時沒有顯式指定它的父類,則這些類默認的父類是 object 類。
Python 還為所有類都提供了一個 __subclasses__() 方法,通過該方法可以查看該類的所有直接子類,該方法返回該類的所有子類組成的列表。例如在上面程序中增加如下兩行:
print('類A的所有子類:', A.__subclasses__())
print('類B的所有子類:', B.__subclasses__())
運行上面代碼,可以看到如下輸出結果:
類A的所有子類: [<class '__main__.C'>]
類B的所有子類: [<class '__main__.C'>]
原文鏈接:https://blog.csdn.net/m0_74309242/article/details/128888949
相關推薦
- 2022-01-29 調用存儲命令:將sqlserver表中的數據導出sql語句或生成insert into語句
- 2022-12-07 C語言實現打印數字金字塔_C 語言
- 2022-10-25 Python第三方常用模塊openpyxl的簡單介紹_python
- 2022-11-13 PyTorch模型的保存與加載方法實例_python
- 2023-08-30 linux服務器使用rsync 和 inotify或者sersync 實現服務器之間文件實時同步
- 2022-11-09 PostgreSQL索引失效會發生什么_PostgreSQL
- 2022-01-11 for循環調用接口返回的數據放在同一個列表中
- 2022-12-23 Kubernetes存儲系統數據持久化管理詳解_云其它
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支