Je veux être en mesure d'appeler une fonction globale d'une classe importée, par exemplePython Comment faire une fonction inter-module?
Dans le fichier PetStore.py
class AnimalSound(object):
def __init__(self):
if 'makenoise' in globals():
self.makenoise = globals()['makenoise']
else:
self.makenoise = lambda: 'meow'
def __str__(self):
return self.makenoise()
Puis, quand je teste dans l'interpréteur Python
>>> def makenoise():
... return 'bark'
...
>>> from PetStore import AnimalSound
>>> sound = AnimalSound()
>>> sound.makenoise()
'meow'
Je reçois un «miaou» au lieu de «aboyer». J'ai essayé d'utiliser les solutions fournies dans python-how-to-make-a-cross-module-variable sans aucune chance.
Merci! J'étais un peu en conflit sur qui donner la réponse acceptée, mais je pense que je vais aller avec vos conseils et passer explicitement dans la fonction. – Evan
@Evan, bien sûr - je n'aime pas la suggestion de Ignacio de communiquer par des canaux cachés mais je comprends que cela semble plus simple (jusqu'aux premières fois que vous perdez des heures ou des jours à déboguer les effets désastreux de ces solutions "simples", ce qui peut prendre des années ou des décennies d'expérience). Bien sûr, si vous acceptez la mauvaise solution, mais que vous implémentez la bonne, vous n'aurez jamais les expériences douloureuses nécessaires pour vraiment comprendre pourquoi la bonne solution est juste ;-). –