AttributeError: модуль 'datetime' не має атрибута 'strptime'


154

Ось мій 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

І коли я намагаюся запустити dateфункцію:

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

Я отримую таку помилку:

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

Як я можу це виправити?


13
from datetime import datetime
Ashwini Chaudhary

Відповіді:


384

Якби мені довелося здогадатися, ти зробив це:

import datetime

вгорі коду. Це означає, що ви повинні це зробити:

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

для доступу до strptimeметоду. Або ви можете змінити заяву про імпорт на це:

from datetime import datetime

і отримати доступ до нього таким, яким ви є.

Люди, які склали datetimeмодуль, також назвали свій класdatetime :

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

12
Нагадування про місто Колумбія в Колумбії: en.wikipedia.org/wiki/Colombia,_Huila
sindri_baldur

16

Використовуйте правильний виклик: strptimeце класний метод datetime.datetimeкласу, це не функція в datetimeмодулі.

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

Як згадував у коментарях Джон Клеменс, деякі люди роблять це from datetime import datetime, що прив'язувало б datetimeім'я до datetimeкласу та змушувало ваш початковий код працювати.

Щоб визначити, з яким випадком ви стикаєтесь (у майбутньому), ознайомтеся із заявами про імпорт

  • import datetime: це модуль (ось що у вас зараз).
  • from datetime import datetime: ось клас.

На жаль - якщо ви адаптуєте чужу кодову базу - для деяких це не рідкість, from datetime import datetimeа для інших систем це просто так, import datetimeяк вона очікує datetimeбути модулем ...;)
Джон Клементс

1

У мене така ж проблема, і це не рішення, яке ви сказали. Тому я змінив "from datetime import date datetime" на "import date datetime". Після цього за допомогою "datetime.datetime" я можу отримати цілі модулі правильно. Я думаю, це правильна відповідь на це питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.