Используя python, можно установить атрибут экземпляра с помощью любого из двух методов ниже:
>>> class Foo(object):
pass
>>> a = Foo()
>>> a.x = 1
>>> a.x
1
>>> setattr(a, 'b', 2)
>>> a.b
2
Можно также назначить свойства через декоратор свойств.
>>> class Bar(object):
@property
def x(self):
return 0
>>> a = Bar()
>>> a.x
0
Мой вопрос: как я могу назначить свойство экземпляру?
Моей интуицией было попробовать что-то вроде этого ...
>>> class Doo(object):
pass
>>> a = Doo()
>>> def k():
return 0
>>> a.m = property(k)
>>> a.m
<property object at 0x0380F540>
... но я получил этот странный объект свойства. Подобные эксперименты дали аналогичные результаты. Я предполагаю, что в некотором отношении свойства более тесно связаны с классами, чем с экземплярами, но я недостаточно хорошо знаю внутреннюю работу, чтобы понять, что здесь происходит.