[問題]obj.__class__() 記憶體位址

看板Python作者時間5年前 (2018/07/25 01:31), 5年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
哈囉 大家好 小弟又來請教各位一個 小問題 這邊用電腦排版 放code 因為code少 就不特別用網頁存 其有些地方 理解不知道是否正確 想請大家矯正 謝謝! code: --------------------------------- class Something: pass print('define a class:') print(Something) #(1) print(type(Something)) print('create an object:') s=Something() print(s) #(2) print(type(s)) print('__class__ read data:') print(s.__class__) #(3) print(s.__class__()) #(4) ----------------------------------- output: define a class: <class 'Something'> <class 'type'> create an object: <Something object at 0x0238DD70> <class 'Something'> __class__ read data: <class 'Something'> <Something object at 0x0239F730> ------------------------------------ 已知最一開始 只要有定義class 就會把該class實例化 資料型態為type 所以此Something其實只是等價一個命名空間 所以在#(1)的地方 print 並不會看到 object at 某記憶體 而只有該命名空間而已 之後我們實例化class 並將將參考s指向該實例化的object 其該s之資料型態為 Something 但小弟想要問的主要是 #(2)和#(4) print之後的記憶體位置會不同呢@@ 他們所出的at object 是兩個不同的object嗎? 如果是不同的小弟有以下假設 不知道是否正確 想請大家幫忙check #(3):每一個物件皆會有 __class__ 屬性 我們可以利用此屬性 來查看 該物件是基於何 種type實例建構出來的 #(4):我們可以利用s.__class__()來得到 type實例(一開始def class產生的實例) 的記 憶體位址 所以我們可以看到#(2)跟#(4)之記憶體位置是不同的 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.17.29 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1532453488.A.919.html ※ 編輯: LouisFFs (114.24.17.29), 07/25/2018 02:08:50
文章代碼(AID): #1RLs9maP (Python)
文章代碼(AID): #1RLs9maP (Python)