Я знаю, что такое property/descriptor
и decorator
. Но мне трудно понять этот момент.поведение экземпляра свойства Python
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.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)
(а) и (с) заявления имеют тот же объект, но property
(б) не делает.
Может кто-нибудь объяснить мне, почему это или я что-то не хватает?
Любая конкретная причина, по которой вы используете 'getter'? Это обычно не нужно; вы просто определяете получателя в первоначальном вызове '@ property'. – user2357112
Я просто экспериментировал здесь. Я создал этот поддельный сценарий, чтобы понять мои сомнения. –