我知道什么是property/descriptor
和decorator
。但我很难理解这一点。
class Person(object):
@property
def name(self, func):
pass
print("-- before setting -- ", name)
@name.setter # <---- what `name` object should be here
def name(self, v):
self._fn, self._ln = v.split(" ")
print("-- before getting -- ", name)
@name.getter # <---- and here
def name(self):
return self._fn + " " + self._ln
print("-- all done -- ", name) # <---- and here
Descriptor
是类级别的对象。所以应该得到相同@name.setter
的描述符对象。当我在 and 之后添加打印语句时,我得到以下结果:@name.getter
name
setter
getter
('-- before setting -- ', <property object at 0x7fc1b0218f70>) # (a)
('-- before getting -- ', <property object at 0x7fc1b0218fc8>) # (b)
('-- all done -- ', <property object at 0x7fc1b0218f70>) #(c)
(a) 和 (c) 语句具有相同的property
对象,但 (b) 没有。
有人可以解释一下为什么会这样还是我错过了什么?