我有一个基本的描述符,在设置或访问时打印它的值:
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
行,它只打印一次。