[問題]obj.__class__() 記憶體位址
哈囉 大家好 小弟又來請教各位一個 小問題
這邊用電腦排版 放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
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):