Python с датой в качестве параметра

#python #oop

#python #ооп

Вопрос:

 from datetime import datetime

class User:

    def __init__(self, username, mail, date_of_birth, gender, password):
        self.username = username
        self.mail = mail
        self.date_of_birth = datetime.datetime.strptime(date_of_birth, "%d.%m.%Y").date()
        self.gender = gender
        self.password = password

    def get_username(self):
        return self.username

    def get_mail(self):
        return self.mail

    def get_date_of_birth(self):
        return self.date_of_birth
    def get_gender(self):
        return self.gender

    def get_password(self):
        self.password

    def get_date(self):
        return self.date_of_birth



Matt = User("Matterson", "matt@gmail.com", "21.12.1999" ,"male", "Password987")
  

Кто-то сказал мне сделать это следующим образом: datetime.datetime.strptime, а не этот datetime.strptime, почему я получаю сообщение об ошибке?

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

Комментарии:

1. поскольку ваш импорт уже импортирует модуль datetime из пакета datetime, вы действительно говорите ему, чтобы он выполнял datetime.datetime.datetime

2. исправьте это, изменив импорт на «импорт даты и времени» или измените свой код на «datetime.strptime …»

3. В чем разница между: из datetime импортировать datetime и импортировать datetime?

4. в модуле есть класс datetime datetime.py ; datetime.datetime ссылается на класс внутри модуля с тем же именем: github.com/python/cpython/blob /…

Ответ №1:

Вы импортировали дату и время как :

 from datetime import datetime
  

Это не работает datetime.datetime , когда вы используете импортированный тип, а не модуль

измените инструкцию import на :

 import datetime
  

Ответ №2:

Иногда модули python имеют внутри себя функцию или класс с аналогичным именем. Это делает импорт немного неудобным. Вы можете импортировать модуль и использовать объект, как в

 import datetime
my_date = datetime.datetime(2020,10,27)
  

Но это немного многословно, поэтому вы можете импортировать datetime , но только добавить datetime переменную в свое пространство имен.

 from datetime import datetime
my_date = datetime(2020, 10, 27)
  

datetime Разработчики посмотрели на strptime функцию и решили, что, поскольку она возвращает datetime объект, она должна быть реализована как метод класса в datetime классе. Итак, с помощью наших двух вариантов вы можете

 import datetime
my_date = datetime.datetime.strptime(date_of_birth, "%d.%m.%Y")
  

или

 from datetime import datetime
my_date = datetime.strptime(date_of_birth, "%d.%m.%Y")
  

«datetime» и «datetime» — это разные вещи, которые могут все это запутать. Я склонен

 import datetime as dt
  

и, к счастью, я не столкнулся с другим классом под названием «dt»