J'ai le dataclass très simple suivant:
import dataclasses
@dataclasses.dataclass
class Test:
value: int
Je crée une instance de la classe mais au lieu d'un entier, j'utilise une chaîne:
>>> test = Test('1')
>>> type(test.value)
<class 'str'>
Ce que je veux réellement, c'est une conversion forcée au type de données que j'ai définie dans la défense de la classe:
>>> test = Test('1')
>>> type(test.value)
<class 'int'>
Dois-je écrire le __init__
Méthode manuellement ou y a-t-il un moyen simple d'y parvenir?
Vous pouvez y parvenir en utilisant le __post_init__
méthode:
import dataclasses
@dataclasses.dataclass
class Test:
value : int
def __post_init__(self):
self.value = int(self.value)
Cette méthode s'appelle après le __init__
méthode
https://docs.python.org/3/library/dataclasses.html#post-init-processing
Ouais, la réponse facile consiste à faire la conversion vous-même dans votre propre __init__()
. Je fais ça parce que je veux mes objets frozen=True
.
Pour la validation de type, Pydandic prétend le faire, mais je ne l'ai pas encore essayé: https://pydantic-docs.helpmanual.io/