Probleme d'utilisation d'un objet time

Probleme d'utilisation d'un objet time - Python - Programmation

Marsh Posté le 05-08-2008 à 17:01:40    

Bonjour,
 
J'ai un petit problème assez basic sur l'utilsation des objets time.  
Je veux initialiser une variable de type time à 0, puis lui ajouter des heures via une boucle.
 
Voila mon code puis la réponse de l'interpreteur :

import datetime
res = datetime.time(0, 0, 0)
print res
res.hour = 3


 

00:00:00
Traceback (most recent call last):
  File "C:/test date 2", line 4, in <module>
    res.hour = 3
AttributeError: attribute 'hour' of 'datetime.time' objects is not writable


 
Je n'écris pas sur une instance de time?
 
Merci d'avance
 

Reply

Marsh Posté le 05-08-2008 à 17:01:40   

Reply

Marsh Posté le 05-08-2008 à 17:09:13    

fucklerest a écrit :

Je n'écris pas sur une instance de time?


Wat?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-08-2008 à 17:11:31    


Je comprends pas pourquoi il me dit que je suis en lecture seule en fait.
 
Res, c'est ma variable, j'ai le droit d'écrire dessus normalement! non?

Reply

Marsh Posté le 05-08-2008 à 17:16:02    

fucklerest a écrit :

Res, c'est ma variable, j'ai le droit d'écrire dessus normalement! non?


Heuu oui et?

 

L'attribut "hour" de l'objet "datetime.time" a été défini comme étant en lecture seule, c'est tout, il y a une méthode permettant d'updater une instance de datetime.time et elle est dans la doc. time.hour, time.minute, time.second et time.microsecond ont été créés pour pouvoir extraire facilement (et de manière lisible) le contenu de l'objet, pas pour le mettre à jour.

Message cité 1 fois
Message édité par masklinn le 05-08-2008 à 17:17:35

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-08-2008 à 17:28:57    

masklinn a écrit :


Heuu oui et?
 
L'attribut "hour" de l'objet "datetime.time" a été défini comme étant en lecture seule, c'est tout, il y a une méthode permettant d'updater une instance de datetime.time et elle est dans la doc. time.hour, time.minute, time.second et time.microsecond ont été créés pour pouvoir extraire facilement (et de manière lisible) le contenu de l'objet, pas pour le mettre à jour.


 
Je suis sur la doc et je ne vois rien de tel : http://docs.python.org/lib/module-time.html
a moins que tu ne parles de la fonction replace dont on parle ici: http://docs.python.org/lib/datetime-time.html
 
donc ca veut dire que si je veux ajouter une heure a mon objet, je dois faire un truc genre :
 

res = res.replace(1)


 
c'est ce que tu préconises?
d'ailleurs ca n'entraine pas un problème de fuite de mémoire?
 
Merci

Message cité 1 fois
Message édité par fucklerest le 05-08-2008 à 17:29:23
Reply

Marsh Posté le 05-08-2008 à 17:31:28    

fucklerest a écrit :

Je suis sur la doc et je ne vois rien de tel : http://docs.python.org/lib/module-time.html


et pourtant

fucklerest a écrit :

a moins que tu ne parles de la fonction replace dont on parle ici: http://docs.python.org/lib/datetime-time.html


Oui, elle est très clairement indiquée comme dévolue à cet usage

fucklerest a écrit :

donc ca veut dire que si je veux ajouter une heure a mon objet, je dois faire un truc genre :

 

res = res.replace(1)



oui (enfin non, ça ça sert à donner à res.hour la valeur 1), à noter que -- comme indiqué dans la documentation -- replace prend des keyword arguments, donc on peut écrire

Code :
  1. res = res.replace(hour=1)


ou

Code :
  1. res = res.replace(second=42)


fucklerest a écrit :

c'est ce que tu préconises?


oui

fucklerest a écrit :

d'ailleurs ca n'entraine pas un problème de fuite de mémoire?


Non (je vois pas pourquoi ça génèrerais une fuite mémoire)


Message édité par masklinn le 05-08-2008 à 17:33:56

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-08-2008 à 17:37:00    

fuite de mémoire parce que res.replace() génère une nouvelle instance d'objet time(). res prend l'adresse de cette nouvelle instance, et que devient l'instance pointée par res auparavent
 
et je n'ai pas remarqué mais le code que je veux est en fait :

res = res.replace(res.hour + 1)


 
Bon c'est pas très beau, mais ca suffira..
Merci ;)

Reply

Marsh Posté le 05-08-2008 à 17:40:59    

fucklerest a écrit :

fuite de mémoire parce que res.replace() génère une nouvelle instance d'objet time(). res prend l'adresse de cette nouvelle instance, et que devient l'instance pointée par res auparavent


Et alors?
 
Apparement, t'es pas très au fait sur le concept de garbage collector


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-08-2008 à 17:44:09    

masklinn a écrit :


Et alors?
 
Apparement, t'es pas très au fait sur le concept de garbage collector


 
Je ne savais pas que python en implémentait un.
 
Merci

Reply

Marsh Posté le 05-08-2008 à 17:47:15    

fucklerest a écrit :

Je ne savais pas que python en implémentait un.


Heuuu t'as jamais remarque que personne ne supprimait jamais d'objets manuellement en python [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed