web-dev-qa-db-fra.com

Accès à la fonction comme attribut dans une classe Python

Je suis dans une situation où il serait extrêmement utile (bien que pas strictement nécessaire) d'accéder à la méthode d'instance d'une classe en tant qu'attribut. (c'est pour une API qui utilise getattr pour définir des valeurs de retour pour un dictionnaire et je ne veux pas gâcher la petite chose sympa)

Je me souviens avoir lu quelque chose sur un @attribute décorateur, mais je n'en trouve pas (soit dans Python ou Django))

TL; DR:

Comment faire ceci:

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

faites ceci:

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

(modifier pour plus de clarté) au lieu de ceci:

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

Vous pouvez utiliser le @property décorateur.

class foo(object):
    bar = "bar"
    @property
    def baz(self):
        return "baz"
66
Praveen Gollakota

Jetez un œil à la forme décoratrice de propriété .

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