Доступ к функции как атрибуту в классе Python - PullRequest
38 голосов
/ 18 апреля 2011

Я нахожусь в ситуации, когда было бы чрезвычайно полезно (хотя и не обязательно) обращаться к методу экземпляра класса в качестве атрибута. (это для API, который использует getattr для установки некоторых возвращаемых значений для словаря, и я не хочу портить изящную мелочь)

Я помню, что читал что-то про @attribute декоратор, но не могу найти его (ни в Python, ни в Django)

TL; DR:

Как мне сделать это:

class foo:
    bar = "bar"
    def baz(self):
        return "baz"

сделать это:

>>> f = foo()
>>> f.baz
"baz"

(отредактируйте для ясности) вместо этого:

>>> f = foo()
>>> f.baz
<bound method foo.baz of <__builtin__.foo instance at 0x...>>

Ответы [ 2 ]

63 голосов
/ 18 апреля 2011

Вы можете использовать декоратор @property.

class foo(object):
    bar = "bar"
    @property
    def baz(self):
        return "baz"
12 голосов
/ 18 апреля 2011

Посмотрите на форму декоратора свойство .

@property
def baz(self):
  return "baz"
...