J'ai donc une classe qui définit des caractères et ses attributs et cela va comme ceci: et lorsque je crée une instance comme ceci: p> Cela fonctionne parfaitement. Mais ce que j'essaie de créer est un moyen de la créer avec des valeurs clés, comme celui-ci: p> donc j'ai essayé d'écrire le il dit: p> Qu'est-ce que je fais mal? Je suis vraiment nouveau à la programmation afin que je ne puisse pas le comprendre. P> p> __ init __ code> Comme ceci, en utilisant ** kwargs code> em>: p>
3 Réponses :
Vous devez utiliser get () code>, par exemple:
kwargs code> est juste une cartographie; Il ne crée pas comme par magie des variables locales pour votre fonction. Vous devez indexer le dictionnaire Python avec la clé souhaitée. from dataclasses import dataclass
@dataclass
class Character:
health: int
dodge: int
damage: int
critAdd: float
Si vous devez effectuer des travaux supplémentaires dans le __ init __ code> Après avoir ajouté le décorateur code> DataClass code> Continuez à définir la méthode __ init __ code>?
Vous pouvez définir __ post_init __ code>, lequel une source de données appellera après __ init __ code>.
Vous n'avez pas besoin de définir votre méthode avec ** kwargs code> pour prendre en charge les arguments de passage par mot-clé. Votre version originale de __ init __ code> prend déjà en charge le caractère (santé = 150, Dodge = 5, dommages = 40, CRITADDD = 1.5) code> Syntaxe que vous souhaitez utiliser. Votre version d'origine est meilleure em> que d'utiliser ** kwargs code>, car il garantit que les bons paramètres ont été passés, rejetant des éléments tels que helth = 150 code> TYPOS . p>
Quelle est votre raison de vouloir utiliser ** kwargs? Votre version initiale est meilleure i> et continuera toujours à l'aide de mots-clés / ordre arbitraire.
la santé n'est pas définie. Vous devez accéder à la santé à Kwargs, qui est un dictionnaire. @ WIM, à quel nombre d'arguments la version originale cessent-elle d'être meilleure?
@ wim je viens de penser qu'il serait plus organisé. Je suppose que je pourrais le garder comme ça, mais si je voulais utiliser ** kwargs (je peux donc comprendre comment cela fonctionne, un peu déroutant pour moi), pourrais-je le faire?