相关疑难解决方法(0)

绑定和未绑定方法对象的id() - 有时对于不同的对象是相同的,有时对于同一对象是不同的

我已经尝试了一些关于绑定和未绑定方法的代码.当我们调用它们时,我认为它们都会返回对象.但是当我id()用来获取一些信息时,它会返回一些我不理解的东西.

IDE:Eclipse

插件:pydev

Class C(object):
    def foo(self):
        pass

cobj = C()

print id(C.foo)    #1
print id(cobj.foo) #2

a = C.foo
b = cobj.foo

print id(a)        #3
print id(b)        #4
Run Code Online (Sandbox Code Playgroud)

输出是......

5671672

5671672

5671672

5669368
Run Code Online (Sandbox Code Playgroud)

为什么#1和#2返回相同的ID?它们不是不同的对象吗?如果我们分配C.fooconj.foo两个变量,#3和#4返回不同的id.

我认为#3和#4表明它们不是同一个对象,但#1和#2 ......

绑定方法的id和未绑定方法有什么区别?

python methods object

29
推荐指数
2
解决办法
5569
查看次数

python对象上可重复的id冲突

我知道python内置id()函数返回一个对象生命周期唯一的ID.我理解,具有非重叠生命期的对象最终可能具有相同的ID.但是,我试图理解这种相当混乱的行为:

>>> id(matplotlib.image.BboxImage.set_cmap)
4424372944
>>> id(numpy.ma.core.MaskedArray.sum)
4424372944
Run Code Online (Sandbox Code Playgroud)

事实上,跨多个解释器实例,行为是可重复的:

Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4343186208 4343186208
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4521153312 4521153312
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4358591264 4358591264
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4389970720 4389970720
Run Code Online (Sandbox Code Playgroud)

看来,matplotlib.image.BboxImage.set_cmapnumpy.ma.core.MaskedArray.sum总是得到相同的ID作为对方,甚至跨越了Python解释器的不同instatiations.

现在我明白这与文档是一致的,id()因为这两个对象在被访问时是动态创建的,因此确实具有非重叠的生命周期.但是为什么这两个不相关的对象总是会使用相同的ID呢?

(这个问题不同于同一类的Object方法有相同的id?因为在这里我问为什么这可以在多个解释器实例中重复,而不是简单地在具有非重叠生命周期的对象上进行虚假的id冲突.)

python

7
推荐指数
1
解决办法
163
查看次数

标签 统计

python ×2

methods ×1

object ×1