Ниже приведен минимальный пример реализации @property
:
class Thing:
def __init__(self, my_word):
self._word = my_word
@property
def word(self):
return self._word
>>> print( Thing('ok').word )
'ok'
В противном случае word
остается вместо свойства.
class Thing:
def __init__(self, my_word):
self._word = my_word
def word(self):
return self._word
>>> print( Thing('ok').word() )
'ok'
Это происходит потому, что атрибуты доступа , (.
и []
) преобразуют значение ToObject .
Что-то подобное этому происходит за кадром:
var a="abc";
new Object(a).b = 123;
alert(a.b); // undefined
В принципе, объект создается «на лету» с помощью аксессуаров свойств, см. Шаг 5:
Произведение MemberExpression
: MemberExpression [ Expression ]
( или MemberExpression . Identifier
) оценивается следующим образом:
MemberExpression
. GetValue(Result(1))
. GetValue(Result(3))
. ToObject(Result(2))
. ToString(Result(4))
. Result(6)
. Это также интересное чтение ... Являются ли строковые литералы объектами или нет?