В книге «Программирование ядра на Python» есть пример о том, как использовать свойство. Код выглядит так:если свойство образца работает
class Hidex(object):
def __init__(self, x):
self.__x = x
@property
def x():
def fget(self):
return ~self.__x
def fset(self, x):
assert isinstance(val, int), 'val must be int'
self.__x = ~x
return locals()
В книге говорится, этот класс будет работать со следующим кодом:
inst = Hidex(20)
print inst.x
inst.x = 30
print inst.x
Но я не думаю, что этот класс будет работать. потому что при доступе inst.x интерпретатор будет фактически запускать Hidex.__dict__['x'].__get__(x, Hidex)
, а поскольку x = свойство (x), первым аргументом arg 'fget' является x, а не функция 'fget', определенная в x().
Кроме того, когда я запускаю этот код, я получил результат:
{'fget': <function fset at 0x.....>, 'self': <__main__.xxxx>, 'fget': <function fget at 0x....>}
traceback:
...... # this result is just telling t.x = 30 cannot run, just skip the details
AttributeError: cannot set attribute
ли я что-то пропустил? почему книга предполагает, что это может работать?
'этот код не работает either.' - Пожалуйста, объясните реальную проблему. Почему, по-вашему, код не работает нормально? – thefourtheye
привет @ thefourtheye, я обновляю проблему. Думаете ли вы, что мы можем использовать свойство, чтобы сосать такой способ? – Spybdai