#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»