class c(object):
def test(self):
global GL
print len(GL),repr(GL)
def tst():
GL.extend([1,2,3])
a=c()
a.test()
tst()
Ce script fonctionne.
Bon, maintenant, isolons la définition de la classe dans un fichier (par
exemple esslc.py) :
class c(object):
def test(self):
global GL
print len(GL),repr(GL)
Ça veut dire que "global", c'est global au module contenant la définition de
la classe, et non au module où l'on instancie la classe.
Je me suis tiré d'affaire, en utilisant un module intermédiaire
(module-buffer).
Mais ça me chiffone, qu'une instance de classe se comporte différemment,
selon l'origine de la classe, pour un même code-source.
@-salutations
Michel Claveau
PS-1 : j'ai bien compris qu'en fait, la classe, c'est esslc.c ; je ne
cherche pas une explication ; c'est juste pour troubler les ingrats des
modules (pour faire parler, quoi)
PS-2 : une autre solution, à faire hurler les statiques, serait de remplacer
l'import par :
execfile("esslc.py",globals(),globals())
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Do Re Mi chel La Si Do
Bonsoir !
passer l'objet GL à la classe
Je ne peux pas faire ça. Les appels des méthodes de la classe sont faits, par COM, depuis d'autres applications, et ne supportent que les paramètres littéraux. Donc, impossible d'utiliser GL en tant que paramètre.
Bien sûr, je pourrais passer par une chaîne exécutable. Mais ça ne me plaît pas trop.
@-salutations
Michel Claveau
Bonsoir !
passer l'objet GL à la classe
Je ne peux pas faire ça. Les appels des méthodes de la classe sont faits,
par COM, depuis d'autres applications, et ne supportent que les paramètres
littéraux. Donc, impossible d'utiliser GL en tant que paramètre.
Bien sûr, je pourrais passer par une chaîne exécutable. Mais ça ne me plaît
pas trop.
Je ne peux pas faire ça. Les appels des méthodes de la classe sont faits, par COM, depuis d'autres applications, et ne supportent que les paramètres littéraux. Donc, impossible d'utiliser GL en tant que paramètre.
Bien sûr, je pourrais passer par une chaîne exécutable. Mais ça ne me plaît pas trop.
@-salutations
Michel Claveau
Bruno Desthuilliers
Bonsoir !
Considérez le script suivant :
GL=[]
class c(object): def test(self): global GL print len(GL),repr(GL)
def tst(): GL.extend([1,2,3]) a=c() a.test()
tst()
Ce script fonctionne.
Bon, maintenant, isolons la définition de la classe dans un fichier (par exemple esslc.py) : class c(object): def test(self): global GL
soit à la méthode: class Bidule(object): def test(self, GL): print len(GL),repr(GL)
ou soit avec une variation autour d'un de ces thèmes (par exemple en passant un objet ou une fonction qui renvoie l'objet GL, etc).
Mais ça me chiffone, qu'une instance de classe se comporte différemment, selon l'origine de la classe, pour un même code-source.
Ton code source *n'est pas* le même. Dans un cas, le nom GL est défini dans l'espace de nommage du module, dans l'autre il ne l'est pas. Et justement, c'est ce qui permet au module de ne pas dépendre *implicitement* d'un symbole extérieur.
Bonsoir !
Considérez le script suivant :
GL=[]
class c(object):
def test(self):
global GL
print len(GL),repr(GL)
def tst():
GL.extend([1,2,3])
a=c()
a.test()
tst()
Ce script fonctionne.
Bon, maintenant, isolons la définition de la classe dans un fichier (par
exemple esslc.py) :
class c(object):
def test(self):
global GL
soit à la méthode:
class Bidule(object):
def test(self, GL):
print len(GL),repr(GL)
ou soit avec une variation autour d'un de ces thèmes (par exemple en
passant un objet ou une fonction qui renvoie l'objet GL, etc).
Mais ça me chiffone, qu'une instance de classe se comporte différemment,
selon l'origine de la classe, pour un même code-source.
Ton code source *n'est pas* le même. Dans un cas, le nom GL est défini
dans l'espace de nommage du module, dans l'autre il ne l'est pas. Et
justement, c'est ce qui permet au module de ne pas dépendre
*implicitement* d'un symbole extérieur.
soit à la méthode: class Bidule(object): def test(self, GL): print len(GL),repr(GL)
ou soit avec une variation autour d'un de ces thèmes (par exemple en passant un objet ou une fonction qui renvoie l'objet GL, etc).
Mais ça me chiffone, qu'une instance de classe se comporte différemment, selon l'origine de la classe, pour un même code-source.
Ton code source *n'est pas* le même. Dans un cas, le nom GL est défini dans l'espace de nommage du module, dans l'autre il ne l'est pas. Et justement, c'est ce qui permet au module de ne pas dépendre *implicitement* d'un symbole extérieur.
bruno at modulix
Do Re Mi chel La Si Do wrote:
Bonsoir !
passer l'objet GL à la classe
Je ne peux pas faire ça. Les appels des méthodes de la classe sont faits, par COM, depuis d'autres applications, et ne supportent que les paramètres littéraux. Donc, impossible d'utiliser GL en tant que paramètre.
En paramètre d'une méthode, soit, mais qui instancie l'objet ? Sinon, il y a la globale masquée : le singleton (ou la variante Borg).
Bien sûr, je pourrais passer par une chaîne exécutable. Mais ça ne me plaît pas trop.
Pour des raisons de sécurité ? Dans ce cas, pourquoi pas un simple protocole texte ? Enfin, ça dépend bien sûr si c'est un script jetable ou une partie critique d'une application !-)
Bon, c'est difficile de juger hors contexte, et il m'arrive aussi de devoir me résoudre à de vilaines verrues, mais franchement, une méthode qui dépend d'une globale 'externe', ça heurte mon sens esthétique.
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Do Re Mi chel La Si Do wrote:
Bonsoir !
passer l'objet GL à la classe
Je ne peux pas faire ça. Les appels des méthodes de la classe sont faits,
par COM, depuis d'autres applications, et ne supportent que les paramètres
littéraux. Donc, impossible d'utiliser GL en tant que paramètre.
En paramètre d'une méthode, soit, mais qui instancie l'objet ? Sinon, il
y a la globale masquée : le singleton (ou la variante Borg).
Bien sûr, je pourrais passer par une chaîne exécutable. Mais ça ne me plaît
pas trop.
Pour des raisons de sécurité ? Dans ce cas, pourquoi pas un simple
protocole texte ? Enfin, ça dépend bien sûr si c'est un script jetable
ou une partie critique d'une application !-)
Bon, c'est difficile de juger hors contexte, et il m'arrive aussi de
devoir me résoudre à de vilaines verrues, mais franchement, une méthode
qui dépend d'une globale 'externe', ça heurte mon sens esthétique.
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
Je ne peux pas faire ça. Les appels des méthodes de la classe sont faits, par COM, depuis d'autres applications, et ne supportent que les paramètres littéraux. Donc, impossible d'utiliser GL en tant que paramètre.
En paramètre d'une méthode, soit, mais qui instancie l'objet ? Sinon, il y a la globale masquée : le singleton (ou la variante Borg).
Bien sûr, je pourrais passer par une chaîne exécutable. Mais ça ne me plaît pas trop.
Pour des raisons de sécurité ? Dans ce cas, pourquoi pas un simple protocole texte ? Enfin, ça dépend bien sûr si c'est un script jetable ou une partie critique d'une application !-)
Bon, c'est difficile de juger hors contexte, et il m'arrive aussi de devoir me résoudre à de vilaines verrues, mais franchement, une méthode qui dépend d'une globale 'externe', ça heurte mon sens esthétique.
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"