Pour information, a la version 2.4, les decorateurs de fonctions ont ete introduits dans le langage. On peut donc ecrire la meme chose avec une ligne en moins :
class A: @staticmethod def methode_statique(): return 0
On Tue, 25 Oct 2005 13:21:33 +0200, JBB <merci@pasdespam.fr> wrote:
est il possible de faire quelque chose du genre:
class A:
def methode_static() :
return 0
A.methode_static()
-> 0
ou a = A()
a.methode_static()
-> 0
Code retravaillé d'après la doc pointée par Yermat:
##############
class A:
def methode_static():
return 0
methode_static = staticmethod(methode_static)
Pour information, a la version 2.4, les decorateurs de fonctions ont
ete introduits dans le langage. On peut donc ecrire la meme chose avec
une ligne en moins :
class A:
@staticmethod
def methode_statique():
return 0
Pour information, a la version 2.4, les decorateurs de fonctions ont ete introduits dans le langage. On peut donc ecrire la meme chose avec une ligne en moins :
class A: @staticmethod def methode_statique(): return 0
tiissa
On peut donc ecrire la meme chose avec une ligne en moins :
... avec *zero* ligne en moins. Le progres n'en est pas moins considerable. ;)
On peut donc ecrire la meme chose avec
une ligne en moins :
... avec *zero* ligne en moins. Le progres n'en est pas moins
considerable. ;)
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis dans la classe A. Ce qui alourdit le code ( surtout qu'en vrai ma classe ne s'appelle pas A)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs fonctions.
En Java je les aurais mises static dans une classe, et C++ pareil ou dans un namespace. En python il y a peut-être une autre solution? les modules peut-être? ( mais je n'ai pas envie de le mettre dans un autre fichier).
class A:
@staticmethod
def methode_statique():
return 0
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis
dans la classe A. Ce qui alourdit le code ( surtout qu'en vrai ma classe
ne s'appelle pas A)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs
fonctions.
En Java je les aurais mises static dans une classe, et C++ pareil ou
dans un namespace.
En python il y a peut-être une autre solution? les modules peut-être?
( mais je n'ai pas envie de le mettre dans un autre fichier).
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis dans la classe A. Ce qui alourdit le code ( surtout qu'en vrai ma classe ne s'appelle pas A)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs fonctions.
En Java je les aurais mises static dans une classe, et C++ pareil ou dans un namespace. En python il y a peut-être une autre solution? les modules peut-être? ( mais je n'ai pas envie de le mettre dans un autre fichier).
Christophe
class A: @staticmethod def methode_statique(): return 0
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis dans la classe A. Ce qui alourdit le code ( surtout qu'en vrai ma classe ne s'appelle pas A)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs fonctions.
En Java je les aurais mises static dans une classe, et C++ pareil ou dans un namespace. En python il y a peut-être une autre solution? les modules peut-être? ( mais je n'ai pas envie de le mettre dans un autre fichier).
Une staticmethod n'est pas dans une classe et tant que telle. Je te conseille ici d'utiliser une classmethod à la place :
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis
dans la classe A. Ce qui alourdit le code ( surtout qu'en vrai ma classe
ne s'appelle pas A)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs
fonctions.
En Java je les aurais mises static dans une classe, et C++ pareil ou
dans un namespace.
En python il y a peut-être une autre solution? les modules peut-être?
( mais je n'ai pas envie de le mettre dans un autre fichier).
Une staticmethod n'est pas dans une classe et tant que telle. Je te
conseille ici d'utiliser une classmethod à la place :
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis dans la classe A. Ce qui alourdit le code ( surtout qu'en vrai ma classe ne s'appelle pas A)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs fonctions.
En Java je les aurais mises static dans une classe, et C++ pareil ou dans un namespace. En python il y a peut-être une autre solution? les modules peut-être? ( mais je n'ai pas envie de le mettre dans un autre fichier).
Une staticmethod n'est pas dans une classe et tant que telle. Je te conseille ici d'utiliser une classmethod à la place :
De toute façon, les staticmethod ça ne sert pas beaucoup quand tu as des vrais classmethod
Mais du coup, tu est oblige d'utiliser un paramètre d'appel 'cls' alors que dans le cas présent il n'apporte rien. du coup ca revient quasiment a la même chose qu'avec une classe normale: class A: def f(self): return 0 def g(self): return self.f()
Sauf que tu l'utile avec: A.f() au lieu de A().f() (cela permet quand même d'éviter l'instanciation d'un objet).
Christophe wrote:
Une staticmethod n'est pas dans une classe et tant que telle. Je te
conseille ici d'utiliser une classmethod à la place :
De toute façon, les staticmethod ça ne sert pas beaucoup quand tu as des
vrais classmethod
Mais du coup, tu est oblige d'utiliser un paramètre d'appel 'cls' alors
que dans le cas présent il n'apporte rien.
du coup ca revient quasiment a la même chose qu'avec une classe normale:
class A:
def f(self):
return 0
def g(self):
return self.f()
Sauf que tu l'utile avec:
A.f()
au lieu de A().f()
(cela permet quand même d'éviter l'instanciation d'un objet).
De toute façon, les staticmethod ça ne sert pas beaucoup quand tu as des vrais classmethod
Mais du coup, tu est oblige d'utiliser un paramètre d'appel 'cls' alors que dans le cas présent il n'apporte rien. du coup ca revient quasiment a la même chose qu'avec une classe normale: class A: def f(self): return 0 def g(self): return self.f()
Sauf que tu l'utile avec: A.f() au lieu de A().f() (cela permet quand même d'éviter l'instanciation d'un objet).