Как мне назначить свойство экземпляру в Python?

Используя 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>

... но я получил этот странный объект свойства. Подобные эксперименты дали аналогичные результаты. Я предполагаю, что в некотором отношении свойства более тесно связаны с классами, чем с экземплярами, но я недостаточно хорошо знаю внутреннюю работу, чтобы понять, что здесь происходит.

5
задан Ceasar Bautista 1 December 2013 в 23:25
поделиться