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).
Mais c'est juste que c'est comme ça que ça marche en Python et il faut faire avec. C'est fait volotairement, comme pour le paramètre self explicite.
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).
Mais c'est juste que c'est comme ça que ça marche en Python et il faut
faire avec. C'est fait volotairement, comme pour le paramètre self
explicite.
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).
Mais c'est juste que c'est comme ça que ça marche en Python et il faut faire avec. C'est fait volotairement, comme pour le paramètre self explicite.
Bruno Desthuilliers
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.
Et alors ? C'est une staticmethod, non ? En Python, le récepteur d'un message n'est pas implicite.
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.
module.
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).
Dans un autre fichier que quoi ?
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.
Et alors ? C'est une staticmethod, non ? En Python, le récepteur d'un
message n'est pas implicite.
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.
module.
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.
Et alors ? C'est une staticmethod, non ? En Python, le récepteur d'un message n'est pas implicite.
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.
module.
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).
Dans un autre fichier que quoi ?
JBB
Bruno Desthuilliers wrote:
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.
Et alors ? C'est une staticmethod, non ? En Python, le récepteur d'un message n'est pas implicite.
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.
module.
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).
Dans un autre fichier que quoi ? Je ne sais pas ce qu'est un module 'python'
pour moi c'est un juste un ensemble de fonction definies dans un fichier .py que l'on importe dans son propre fichier .py
Bruno Desthuilliers wrote:
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.
Et alors ? C'est une staticmethod, non ? En Python, le récepteur d'un
message n'est pas implicite.
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.
module.
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).
Dans un autre fichier que quoi ?
Je ne sais pas ce qu'est un module 'python'
pour moi c'est un juste un ensemble de fonction definies dans un fichier
.py que l'on importe dans son propre fichier .py
Et là ça ne marche pas. je suis obligé de mettre A.f() alors que je suis dans la classe A.
Et alors ? C'est une staticmethod, non ? En Python, le récepteur d'un message n'est pas implicite.
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.
module.
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).
Dans un autre fichier que quoi ? Je ne sais pas ce qu'est un module 'python'
pour moi c'est un juste un ensemble de fonction definies dans un fichier .py que l'on importe dans son propre fichier .py
Bruno Desthuilliers
Bruno Desthuilliers wrote:
(snip)
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs fonctions.
module.
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).
Dans un autre fichier que quoi ?
Je ne sais pas ce qu'est un module 'python'
http://www.python.org/doc/2.4.2/tut/node8.html """ A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. """
pour moi c'est un juste un ensemble de fonction definies dans un fichier .py que l'on importe dans son propre fichier .py
C'est une vision très limitée:
Python 2.4.1 (#1, Jul 23 2005, 00:37:37) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
dir() ['__builtins__', '__doc__', '__name__']
import random dir() ['__builtins__', '__doc__', '__name__', 'random']
random <module 'random' from '/usr/lib/python2.4/random.pyc'>
import types m = types.ModuleType('mon_module', 'un module sans fichier ???') m <module 'mon_module' (built-in)>
setattr(m, 'ma_fonction', lambda: "ma fonction dans mon module") m.ma_fonction <function <lambda> at 0x403feaac>
m.mafonction() 'ma fonction dans mon module'
Et oui, en Python, un module est (aussi...) un objet. Bref...
Pour en revenir à ta question d'origine: si tu veux regrouper un ensemble de définitions, le langage te propose essentiellement deux choix: les classes et les modules. Si cet ensemble de définition ne répond pas à la sémantique d'une classe mais présente une certaine cohérence interne et un faible couplage externe, le choix le plus évident est le module - qui implique effectivement (le hack ci dessus n'ayant guère d'intérêt en pratique) de regrouper ces définitions dans un fichier séparé. Ce qui n'est pas forcément une mauvaise chose (découplage, réutilisation...).
Par ailleurs, *a priori*, je ne vois guère l'intérêt de créer un sous-espace de nommage dans un même module. Tu peux préciser ton cas d'utilisation ?
Bruno Desthuilliers wrote:
(snip)
En fait l'idée initiale était de regrouper dans un 'ensemble'
plusieurs fonctions.
module.
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).
Dans un autre fichier que quoi ?
Je ne sais pas ce qu'est un module 'python'
http://www.python.org/doc/2.4.2/tut/node8.html
"""
A module is a file containing Python definitions and statements. The
file name is the module name with the suffix .py appended.
"""
pour moi c'est un juste un ensemble de fonction
definies dans un fichier
.py que l'on importe dans son propre fichier .py
C'est une vision très limitée:
Python 2.4.1 (#1, Jul 23 2005, 00:37:37)
[GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on
linux2
Type "help", "copyright", "credits" or "license" for more information.
dir()
['__builtins__', '__doc__', '__name__']
import random
dir()
['__builtins__', '__doc__', '__name__', 'random']
random
<module 'random' from '/usr/lib/python2.4/random.pyc'>
import types
m = types.ModuleType('mon_module', 'un module sans fichier ???')
m
<module 'mon_module' (built-in)>
setattr(m, 'ma_fonction', lambda: "ma fonction dans mon module")
m.ma_fonction
<function <lambda> at 0x403feaac>
m.mafonction()
'ma fonction dans mon module'
Et oui, en Python, un module est (aussi...) un objet. Bref...
Pour en revenir à ta question d'origine: si tu veux regrouper un
ensemble de définitions, le langage te propose essentiellement deux
choix: les classes et les modules. Si cet ensemble de définition ne
répond pas à la sémantique d'une classe mais présente une certaine
cohérence interne et un faible couplage externe, le choix le plus
évident est le module - qui implique effectivement (le hack ci dessus
n'ayant guère d'intérêt en pratique) de regrouper ces définitions dans
un fichier séparé. Ce qui n'est pas forcément une mauvaise chose
(découplage, réutilisation...).
Par ailleurs, *a priori*, je ne vois guère l'intérêt de créer un
sous-espace de nommage dans un même module. Tu peux préciser ton cas
d'utilisation ?
En fait l'idée initiale était de regrouper dans un 'ensemble' plusieurs fonctions.
module.
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).
Dans un autre fichier que quoi ?
Je ne sais pas ce qu'est un module 'python'
http://www.python.org/doc/2.4.2/tut/node8.html """ A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. """
pour moi c'est un juste un ensemble de fonction definies dans un fichier .py que l'on importe dans son propre fichier .py
C'est une vision très limitée:
Python 2.4.1 (#1, Jul 23 2005, 00:37:37) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
dir() ['__builtins__', '__doc__', '__name__']
import random dir() ['__builtins__', '__doc__', '__name__', 'random']
random <module 'random' from '/usr/lib/python2.4/random.pyc'>
import types m = types.ModuleType('mon_module', 'un module sans fichier ???') m <module 'mon_module' (built-in)>
setattr(m, 'ma_fonction', lambda: "ma fonction dans mon module") m.ma_fonction <function <lambda> at 0x403feaac>
m.mafonction() 'ma fonction dans mon module'
Et oui, en Python, un module est (aussi...) un objet. Bref...
Pour en revenir à ta question d'origine: si tu veux regrouper un ensemble de définitions, le langage te propose essentiellement deux choix: les classes et les modules. Si cet ensemble de définition ne répond pas à la sémantique d'une classe mais présente une certaine cohérence interne et un faible couplage externe, le choix le plus évident est le module - qui implique effectivement (le hack ci dessus n'ayant guère d'intérêt en pratique) de regrouper ces définitions dans un fichier séparé. Ce qui n'est pas forcément une mauvaise chose (découplage, réutilisation...).
Par ailleurs, *a priori*, je ne vois guère l'intérêt de créer un sous-espace de nommage dans un même module. Tu peux préciser ton cas d'utilisation ?