小编Tim*_*mur的帖子

为什么同一个对象的不同方法具有相同的`id`?

我以为is操作员检查对象id的相等性.但它似乎并非如此:

>>> class A(object):
...   def f(): return 1
...   def g(): return 2
...
>>> a = A()
>>> a.f is a.g
False
>>> id(a.f) == id(a.g)
True
Run Code Online (Sandbox Code Playgroud)

python

16
推荐指数
2
解决办法
1888
查看次数

为什么setattr对属性和方法的工作方式不同?

当我设置属性时,getattr结果会id更改为值id.当我设置方法时,getattr结果id不会改变.为什么?

class A (object):
    a = 1
a = 42
print id(getattr(A, 'a'))
print id(a)
setattr(A, 'a', a)
print id(getattr(A, 'a'))
# Got:
#   36159832
#   36160840
#   36160840

class B (object):
    def b(self):
        return 1
b = lambda self: 42
print id(getattr(B, 'b'))
print id(b)
setattr(B, 'b', b)
print id(getattr(B, 'b'))
# Got:
#   140512684858496
#   140512684127608
#   140512684858496
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
1
解决办法
58
查看次数

标签 统计

python ×2