Accessing function as attribute in a Python class


Question

I'm in a situation where it would be extremely useful (though not strictly necessary) to access a class' instancemethod as an attribute. (it's for an API that uses getattr to set some return values for a dictionary and I don't want to mess the neat little thing up)

I remember reading something about an @attribute decorator, but I can't find one (either in Python or Django)

TL;DR:

How do I make this:

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

do this:

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

(edit for clarity) instead of this:

>>> f = foo()
>>> f.baz
<bound method foo.baz of <__builtin__.foo instance at 0x...>>
1
39
4/18/2011 3:58:47 PM

Accepted Answer

You can use the @property decorator.

class foo(object):
    bar = "bar"
    @property
    def baz(self):
        return "baz"
64
4/18/2011 4:05:28 PM

Take a look at the decorator form of property.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon