作者LouisFFs ()
看板Python
标题[问题]obj.__class__() 记忆体位址
时间Wed Jul 25 01:31:25 2018
哈罗 大家好 小弟又来请教各位一个 小问题
这边用电脑排版 放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://webptt.com/cn.aspx?n=bbs/Python/M.1532453488.A.919.html
※ 编辑: LouisFFs (114.24.17.29), 07/25/2018 02:08:50