Je dois mettre à jour le dictionnaire d'un trait mappé quelque temps après la création initiale des traitements.
Comment puis-je faire cela?
Le code suivant: rendements: p>
3 Réponses :
D'accord, le code suivant a fonctionné: Note: strong> Les lignes commentées sont des choses que j'ai essayées, qui ont pas em> travail . p> p>
Je ne suis pas sûr de comprendre ce que vous êtes après, mais je peux faire quelques recommandations:
code> est un bon choix ici si vous autorisez à la fois Aucun code> et dict code>. li>.
- Utilisez Initialisation dynamique pour créer une valeur pour un trait au moment de l'exécution. Il est préférable d'utiliser un
__ init __ code> méthode. LI>
- Si vous avez vraiment besoin d'un
__ init __ code> méthode, vous doit em> appel super code> à l'intérieur de celui-ci pour fonctionner correctement, par exemple. `Super () init fort> (* args, ** kwargs) li>
ol> Voici une version de votre code qui fonctionne et je pense que résout votre problème. p> xxx pré> et voici quelques commentaires sur le code qui n'a pas fonctionné. La ligne self.zap = trait ("Aucun", new_dict) CODE> ci-dessous ne fonctionne pas car il essaie de créer un code> objet code> objet mais self.zap Code> accepte uniquement Aucun code> ou dict code>. Ma recommandation est d'utiliser des définitions de trait uniquement pour la saisie, au niveau de la classe. Dans les méthodes, utilisez des types de python réguliers. P> xxx pré> p>
Merci pour votre réponse! En réponse à vos points numérotés: 1. Je ne veux pas d'un code>, juste un
dict code>. 2. L'initialisation dynamique ne me permet toujours que de définir le contenu du trait une fois; J'ai besoin de redéfinir le contenu des traitements de plusieurs reprises lors de l'exécution du programme. 3. Oui, désolé, j'aurais dû inclure cela dans mon exemple de code, pour être complètement correct. Il n'est pas clair pour moi de savoir comment votre solution proposée résout mon problème, car je dois redéfinir les contenus du trait à plusieurs reprises lors de l'exécution du programme.
Voici la deuxième tentative d'une réponse donnée à la Commentaire de l'affiche original
Si vous souhaitez que le type de si elle doit être calculée au moment de l'exécution, puis utilisez Initialisation dynamique à initialiser la valeur: P> zap code> soit
dict code> et Seuls
dict code>, puis définissez-le comme tel. Vous pouvez également aligner la valeur initiale s'il ne doit pas nécessairement être ordinateur au moment de l'exécution: p>
>>> class Bar(HasTraits):
... zap = Dict()
...
... def _zap_default(self):
... default = {}
... default[1] = 'a'
... return default
...
... def add_pair(self, key, value):
... self.zap[key] = value
...
>>> bar_method = Bar()
>>> bar_method.zap
{1: 'a'}
>>> bar_method.add_pair(26, 'z')
>>> bar_method.zap
{1: 'a', 26: 'z'}
Merci de continuer à essayer de m'aider à résoudre ce problème! Je crains d'avoir fait un travail terrible d'expliquer clairement ce que je veux. Donc, j'ai encore essayé, à partir de zéro: Stackoverflow.com/questions/59010527/...