2011-04-18 9 views
33

Estoy en una situación en la que sería extremadamente útil (aunque no estrictamente necesario) acceder al método de instancia de una clase como atributo. (Es para una API que usa getattr para establecer algunos valores de retorno para un diccionario y no quiero ensuciar nada)Acceso a la función como atributo en una clase de Python

Recuerdo haber leído algo sobre un decorador @attribute, pero no puedo encontrar uno (ya sea en Python o Django)

TL; DR:

¿Cómo hago esto:

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

hacer esto:

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

(edición para mayor claridad) en lugar de esto:

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

Respuesta

57

Usted puede utilizar el decorador @property.

class foo(object): 
    bar = "bar" 
    @property 
    def baz(self): 
     return "baz" 
+0

gracias, estaba en la punta de mi lengua: D –

12

Eche un vistazo a la forma de decorador de property.

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