Как исправить «AttributeError: тип объекта не имеет атрибута» в Python? - PullRequest
0 голосов
/ 25 января 2019

Я добавляю некоторый код к предустановленному коду, чтобы проверить доступность времени, то есть, если время встречи может вписаться в предложенное расписание.Тем не менее, я продолжаю получать следующую ошибку.Может ли кто-нибудь дать мне несколько советов?Большое спасибо за ваше время.

Предустановленные коды:

from datetime import datetime
class Meeting:
    def __init__(self, start_time, end_time):
        self.start_time = start_time
        self.end_time = end_time

Мои коды:

def check_availability(meetings, proposed_time): 
    meeting_start = Meeting.datetime.start_time.hour 
    meeting_end = Meeting.datetime.end_time.hour  
    ok_time = datetime.proposed_time.hour   
    if meeting_start < ok_time < meeting_end:
        return True 
    else:
        return False 

meetings = [Meeting(datetime(2018, 8, 1, 9, 0, 0), datetime(2018, 8, 1, 11, 
0, 0)), Meeting(datetime(2018, 8, 1, 15, 0, 0), datetime(2018, 8, 1, 16, 0, 
0)), Meeting(datetime(2018, 8, 2, 9, 0, 0), datetime(2018, 8, 2, 10, 0, 0))]

print(check_availability(meetings, datetime(2018, 8, 1, 12, 0, 0)))
print(check_availability(meetings, datetime(2018, 8, 1, 10, 0, 0)))

1 Ответ

0 голосов
/ 26 января 2019

Ваш код вызывает это исключение:

AttributeError: type object 'Meeting' has no attribute 'datetime'

В этой строке:

meeting_start = Meeting.datetime.start_time.hour

Python сообщает вам, что Meeting класс не имеет атрибута с именем datetime.Это верно: Meeting класс является фабрикой для создания встречи объектов (или экземпляров ), и эти объекты имеют start_time и end_timeатрибуты, к которым можно получить доступ следующим образом:

>>> meeting = Meeting(datetime(2018, 8, 1, 9, 0, 0), datetime(2018, 8, 1, 11, 
0, 0))
>>> print(meeting.start_time)
2018-08-01 09:00:00                                                                                                     
>>> print(meeting.end_time)                                                                                             
2018-08-01 11:00:00 

Вашей функции check_availability передается список собраний, поэтому вам необходимо выполнить цикл по списку, чтобы проверить, не конфликтует ли какое-либо собрание с предлагаемым временем собрания.

def check_availability(meetings, proposed_time):
    # Loop over the list of meetings; "meeting"
    # is the meeting that you are currently inspecting.
    for meeting in meetings:
        # if proposed_time is between meeting.start_time
        # and meeting.end_time, return False
    # If you get through the list without returning False
    # then the proposed time must be ok, so return True.
...