Effectivement il ne s'agit que d'information statique
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| from dataclasses import dataclass
from datetime import datetime
from dataclass_csv import DataclassReader, dateformat
@dataclass
#@dateformat('%Y/%m/%d')
@dateformat('%d/%m/%Y')
class User():
name: str
email: str
birthday: datetime
class fil():
def __init__(self,dbNAME,nomrepertoire,Base):
self.dbNAME = dbNAME
self.nomrepertoire = nomrepertoire
self.Base = Base
def __str__(self):
return self.dbNAME + ' ' + self.nomrepertoire + ' self.Base'
if __name__ == '__main__':
fic ='C:\\Users\\User\\eclipse-workspace\\Fube2\\src\\users.csv'
rid = User('MAxi','OP@oran.fr', '15/01/1874')
print(rid)
rid = User('MAxi',465, '15/01/1874')
print(rid)
with open(fic) as f:
reader = DataclassReader(f, User)
for row in reader:
print(row)
c1 =fil('MAxi','OP@oran.fr', '15/01/1874')
print(c1)
c1 =fil('MAxi',465, '15/01/1874')
print(c1) |
Mais même avec une classes définie différement, rien n'interdit de mettre une valeur inadaptée à ce que l'on veux exprimer dans une définition de class.
Résultat du code
User(name='MAxi', email='OP@oran.fr', birthday='15/01/1874')
User(name='MAxi', email=465, birthday='15/01/1874')
User(name='jean', email='toto@fr.fr', birthday=datetime.datetime(1867, 1, 19, 0, 0))
User(name='cool', email='titi@fr.fr', birthday=datetime.datetime(1107, 8, 19, 0, 0))
User(name='Edit', email='edit@test.com', birthday=datetime.datetime(2318, 11, 20, 0, 0))
MAxi OP@oran.fr self.Base
Traceback (most recent call last):
File "C:\Users\User\eclipse-workspace\TestDivers\ex0000007.py", line 43, in <module>
print(c1)
File "C:\Users\User\eclipse-workspace\TestDivers\ex0000007.py", line 21, in __str__
return self.dbNAME + ' ' + self.nomrepertoire + ' self.Base'
TypeError: can only concatenate str (not "int") to str
On va provoque une erreur sur l'utilisation du
1 2
| def __str__(self):
return self.dbNAME + ' ' + self.nomrepertoire + ' self.Base' |
qui ce veux ici adapter a des variables de type String et non utilisable pour des valeur numérique.
Biensur il pourrait être util d'adpter la définition du
1 2
| def __str__(self):
return self.dbNAME + ' ' + self.nomrepertoire + ' self.Base' |
Ce qui est pratique c'est qu'avec la solution @dataclass ce paramétrage est autoimplémenté dans le code final.
Partager