为什么python描述符的__get__从IPython运行两次?

时间:2014-03-01 23:30:48

标签: python descriptor

我有一个基本的描述符,在设置或访问时打印它的值:

class ObservableValue(object):
    def __init__(self):
        self.instances = {} #instance -> value

    def __set__(self, obj, value):
        print('setting to %d'%(value,))
        self.instances[obj] = value

    def __get__(self, obj, objtype):
        v = self.instances[obj]
        print("getting %d"%v)
        return v


class MyObject(object):

    value = ObservableValue()

    def __init__(self, value):
        self.value = value

如果我打开一个vanilla Python交互式会话,我可以这样做

>>> import MyFile
>>> mo = MyFile.MyObject(42)
setting to 42
>>> mo.value
getting 42
42

但如果我在IPython中这样做,我会得到这个

>>> import MyFile
>>> mo = MyFile.MyObject(42)
setting to 42
>>> mo.value
getting 42
getting 42
42

为什么要打印两次?

ADDED:如果我在导入的文件中放置了对象实例化和mo.value行,它只打印一次。

0 个答案:

没有答案