AttributeError: moduł „datetime” nie ma atrybutu „strptime”

153

Oto moja Transactionklasa:

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

A kiedy próbuję uruchomić datefunkcję:

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

Otrzymuję następujący błąd:

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

Jak mogę to naprawić?

Michael
źródło
13
from datetime import datetime
Ashwini Chaudhary

Odpowiedzi:

384

Gdybym miał zgadywać, zrobiłeś to:

import datetime

u góry twojego kodu. Oznacza to, że musisz to zrobić:

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

aby uzyskać dostęp do strptimemetody. Możesz też zmienić instrukcję importu na następującą:

from datetime import datetime

i uzyskaj do niego dostęp takim, jakim jesteś.

Osoby, które stworzyły datetimemoduł, również nazwały swoją klasędatetime :

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

źródło
12
Przypomnienia o mieście Kolumbia w Kolumbii: en.wikipedia.org/wiki/Colombia,_Huila
sindri_baldur
16

Użyj prawidłowego wywołania: strptimejest metodą datetime.datetimeklasową klasy, nie jest funkcją w datetimemodule.

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

Jak wspomniał Jon Clements w komentarzach, niektórzy tak robią from datetime import datetime, co wiązałoby datetimenazwę z datetimeklasą i sprawił, że początkowy kod działał.

Aby określić, z jakim przypadkiem masz do czynienia (w przyszłości), spójrz na swoje instrukcje importu

  • import datetime: to jest moduł (to właśnie masz teraz).
  • from datetime import datetime: to klasa.
Thomas Orozco
źródło
Niestety - jeśli dostosowujesz czyjąś bazę kodu - nierzadko zdarza się, że niektórzy robią, from datetime import datetimea dla innych systemów jest to po prostu taki import datetime, jakiego oczekuje datetimesię od modułu ...;)
Jon Clements
1

Mam ten sam problem i nie jest to rozwiązanie, o którym mówiłeś. Więc zmieniłem „z importu daty i godziny” na „import daty i godziny”. Po tym przy pomocy "datetime.datetime" mogę poprawnie pobrać całe moduły. Myślę, że to jest prawidłowa odpowiedź na to pytanie.

Kursad
źródło