0
votes

Essayer d'utiliser ** kwargs pour définir des attributs d'une classe

J'ai donc une classe qui définit des caractères et ses attributs et cela va comme ceci: xxx

et lorsque je crée une instance comme ceci: xxx

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: xxx

donc j'ai essayé d'écrire le __ init __ Comme ceci, en utilisant ** kwargs : xxx

il dit: xxx

Qu'est-ce que je fais mal? Je suis vraiment nouveau à la programmation afin que je ne puisse pas le comprendre.


3 commentaires

Quelle est votre raison de vouloir utiliser ** kwargs? Votre version initiale est meilleure 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?


3 Réponses :


-2
votes

Vous devez utiliser get () , par exemple: xxx


0 commentaires

0
votes

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


2 commentaires

Si vous devez effectuer des travaux supplémentaires dans le __ init __ Après avoir ajouté le décorateur DataClass Continuez à définir la méthode __ init __ ?


Vous pouvez définir __ post_init __ , lequel une source de données appellera après __ init __ .



1
votes

Vous n'avez pas besoin de définir votre méthode avec ** kwargs pour prendre en charge les arguments de passage par mot-clé. Votre version originale de __ init __ prend déjà en charge le caractère (santé = 150, Dodge = 5, dommages = 40, CRITADDD = 1.5) Syntaxe que vous souhaitez utiliser. Votre version d'origine est meilleure que d'utiliser ** kwargs , car il garantit que les bons paramètres ont été passés, rejetant des éléments tels que helth = 150 TYPOS .


0 commentaires