web-dev-qa-db-fra.com

AttributeError: le module 'datetime' n'a pas d'attribut 'strptime'

Voici ma classe Transaction:

class Transaction(object):
    def __init__(self, company, num, price, date, is_buy):
        self.company = company
        self.num = num
        self.price = price
        self.date = datetime.strptime(date, "%Y-%m-%d")
        self.is_buy = is_buy

Et quand j'essaie de lancer la fonction date:

tr = Transaction('AAPL', 600, '2013-10-25')
print tr.date

Je reçois l'erreur suivante:

   self.date = datetime.strptime(self.d, "%Y-%m-%d")
 AttributeError: 'module' object has no attribute 'strptime'

Comment puis-je résoudre ce problème?

124
Michael

Si je devais deviner, vous avez fait ceci:

import datetime

en haut de votre code. Cela signifie que vous devez faire ceci:

datetime.datetime.strptime(date, "%Y-%m-%d")

pour accéder à la méthode strptime. Ou, vous pouvez changer la déclaration d'importation en ceci:

from datetime import datetime

et y accéder comme vous êtes.

Les personnes qui ont créé le module datetime ont également nommé leur classe datetime :

#module  class    method
datetime.datetime.strptime(date, "%Y-%m-%d")
296
iCodez

Utilisez le bon appel: strptime est une méthode de classe de la classe datetime.datetime, ce n'est pas une fonction du module datetime.

self.date = datetime.datetime.strptime(self.d, "%Y-%m-%d")

Comme mentionné par Jon Clements dans les commentaires, certaines personnes font from datetime import datetime, ce qui lierait le nom datetime à la classe datetime et ferait fonctionner votre code initial.

Pour identifier le cas auquel vous êtes confronté (à l'avenir), regardez vos déclarations d'importation

  • import datetime: c'est le module (c'est ce que vous avez maintenant).
  • from datetime import datetime: c'est la classe.
15
Thomas Orozco