En python, je peux ajouter une méthode à une classe à l'aide de la commande @classmethod
décorateur. Existe-t-il un décorateur similaire pour ajouter une propriété à une classe ? Je peux mieux montrer ce dont je parle.
class Example(object):
the_I = 10
def __init__( self ):
self.an_i = 20
@property
def i( self ):
return self.an_i
def inc_i( self ):
self.an_i += 1
# is this even possible?
@classproperty
def I( cls ):
return cls.the_I
@classmethod
def inc_I( cls ):
cls.the_I += 1
e = Example()
assert e.i == 20
e.inc_i()
assert e.i == 21
assert Example.I == 10
Example.inc_I()
assert Example.I == 11
La syntaxe que j'ai utilisée ci-dessus est-elle possible ou nécessite-t-elle quelque chose de plus ?
La raison pour laquelle je veux des propriétés de classe est que je peux charger paresseusement les attributs de la classe, ce qui semble assez raisonnable.
2 votes
Je ne connais pas python... est-ce que c'est le genre de choses que vous recherchez ? python.org/download/releases/2.2/descrintro/#property
0 votes
Si je lis bien, on peut créer des méthodes pour agir comme setter et getter (comme dans d'autres langages) afin de charger paresseusement la valeur de la propriété lors du premier get... ce qui, je pense, est ce que vous vouliez ?
3 votes
@White Dragon. La fonctionnalité de propriété que vous recherchez ajoute des propriétés aux instances de classe, pas aux classes elles-mêmes. Ma question porte sur
Example.I
noe.i
.0 votes
Voici la solution pour créer une propriété de classe dans un autre sujet : stackoverflow.com/a/35640842/1113207
0 votes
Duplicata : Utilisation de property() sur les classmethods