網站首頁 編程語言 正文
將字典轉換成對象的小技巧:
bokeyuan = {"b": 1, ? ? ? ? ? ? ? ? "o": 2, ? ? ? ? ? ? ? ? "k": 3, ? ? ? ? ? ? ? ? "e": 4, ? ? ? ? ? ? ? ? "y": 5, ? ? ? ? ? ? ? ? "u": 6, ? ? ? ? ? ? ? ? "a": 7, ? ? ? ? ? ? ? ? "n": 8, ? ? ? ? ? ? ? ? } ? class Dict2Obj: ? ? ? # def __init__(self, bokeyuan): ? ? # ? ? self.b = bokeyuan['b'] ? ? # ? ? self.o = bokeyuan['o'] ? ? # ? ? self.k = bokeyuan['k'] ? ? # ? ? self.e = bokeyuan['e'] ? ? # ? ? self.y = bokeyuan['y'] ? ? # ? ? self.u = bokeyuan['u'] ? ? # ? ? self.a = bokeyuan['a'] ? ? # ? ? self.n = bokeyuan['n'] ? ? ? def __init__(self, bokeyuan): ? ? ? ? print("修改前:", self.__dict__) ? ? ? ? self.__dict__.update(bokeyuan) ? ? ? ? print("修改后:", self.__dict__) ? d = Dict2Obj(bokeyuan) print(d)
D:\MC\venv\Scripts\python.exe D:/MC/test03.py 修改前: {} 修改后: {'b': 1, 'o': 2, 'k': 3, 'e': 4, 'y': 5, 'u': 6, 'a': 7, 'n': 8} <__main__.Dict2Obj object at 0x0000019722B78400> ? Process finished with exit code 0
Python的實例有自己的__dict__
屬性,它對應的類也有自己的__dict__ ?
(但是有些特殊的對象是沒有__dict__
屬性的,這里不做討論),,__dict__
是一個字典,鍵是屬性名,值為屬性值。
?上面self實例對象的屬性首先是{},更新后變為{'b': 1, 'o': 2, 'k': 3, 'e': 4, 'y': 5, 'u': 6, 'a': 7, 'n': 8}
#首先創建一個類cls,這個類中包含一個值為1的類變量clsvar,一個值為2的實例變量insvar, class cls: ? ? clsvar = 1 ? ? def __init__(self): ? ? ? ? self.insvar = 2 ? #創建類的實例ins1和ins2ins1 = cls() ins2 = cls() ? print(cls.__dict__) #類的__dict__屬性 print(ins1.__dict__) # 實例對象ins1的__dict__屬性 ? ins1.clsvar=20 print(cls.clsvar) print(ins1.clsvar) print(ins2.clsvar) # ins1實例改變類變量不會影響ins2實例 print(cls.__dict__) #類的__dict__屬性 print(ins1.__dict__) # 實例對象ins1的__dict__屬性
D:\MC\venv\Scripts\python.exe D:/MC/test03.py {'__module__': '__main__', 'clsvar': 1, '__init__': <function cls.__init__ at 0x00000156AEC75040>, '__dict__': <attribute '__dict__' of 'cls' objects>, '__weakref__': <attribute '__weakref__' of 'cls' objects>, '__doc__': None} {'insvar': 2} 1201 {'__module__': '__main__', 'clsvar': 1, '__init__': <function cls.__init__ at 0x00000156AEC75040>, '__dict__': <attribute '__dict__' of 'cls' objects>, '__weakref__': <attribute '__weakref__' of 'cls' objects>, '__doc__': None} {'insvar': 2, 'clsvar': 20} ? Process finished with exit code 0
當打印類的__dict__
屬性時,列出了類cls所包含的屬性,包括一些類內置屬性和類變量clsvar以及構造方法__init__
而實例變量則包含在實例對象ins1的__dict__屬性中,一個對象的屬性查找順序
遵循首先查找實例對象自己,然后是類,接著是類的父類。當ins1在自己的__dict__
中查找到了clsvar,就不會再向上查找
ins1.clsvar = 20
這句只是在實例ins1的__dict__屬性中增加了'clsvar': 20這一鍵值對,而類中的clsvar的值并沒有改變,重要的事情說三遍:一個對象的屬性查找順序遵循首先查找實例對象自己,然后是類,接著是類的父類。當ins1在自己的__dict__中查找到了clsvar,就不會再向上查找,所以輸出了值20。但是此時,cls類中的clsvar的值仍然為1。?
原文鏈接:https://blog.csdn.net/weixin_42550871/article/details/124386435
相關推薦
- 2023-07-30 vscode自定義用戶代碼片段
- 2023-01-08 Android?IntentFilter的匹配規則示例詳解_Android
- 2022-09-27 OpenCV中findContours函數參數詳解_C 語言
- 2022-04-01 FastDFS服務不能上傳文件 報錯:fileutil.MyException: getStoreS
- 2023-07-28 select 框添加樹結構(todu)
- 2022-06-07 C++實現關系與關系矩陣的代碼詳解_C 語言
- 2022-06-12 一文教會你在sqlserver中創建表_MsSql
- 2022-11-23 Python多線程使用方法詳細講解_python
- 最近更新
-
- 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同步修改后的遠程分支