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

155

Вот мой 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
Ашвини Чаудхари

Ответы:

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

У меня та же проблема, и это не решение, которое вы сказали. Таким образом, я изменил «от datetime import datetime» до «import datetime». После этого с помощью «datetime.datetime» я могу правильно получить все модули. Я думаю, что это правильный ответ на этот вопрос.

Куршад
источник