bb.*_*bb. 13 python methods overriding object
进入以下几点:
>>> class A:
... def __str__(self):
... return "some A()"
...
>>> class B(A):
... def __str__(self):
... return "some B()"
...
>>> print A()
some A()
>>> print B()
some B()
>>> A.__str__ == B.__str__
False # seems reasonable, since each method is an object
>>> id(A.__str__)==id(B.__str__)
True # what?!
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
Mar*_*son 11
在id(A.__str__) == id(B.__str__)评估字符串时,A.__str__会创建其ID,然后进行垃圾回收.然后B.__str__创建,并发生在A.__str__最初与之前完全相同的地址,因此它(在CPython中)获得相同的id.
尝试分配A.__str__和B.__str__临时变量,你会看到不同的东西:
>>> f = A.__str__
>>> g = B.__str__
>>> id(f) == id(g)
False
Run Code Online (Sandbox Code Playgroud)
有关此现象的更简单示例,请尝试:
>>> id(float('3.0')) == id(float('4.0'))
True
Run Code Online (Sandbox Code Playgroud)
以下作品:
>>> id(A.__str__.im_func) == id(A.__str__.im_func)
True
>>> id(B.__str__.im_func) == id(A.__str__.im_func)
False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |