Класс Phone имеет публичный атрибут класса global_phone_list. В нем содержится словарь, в котором соответствующий объект номер телефона в качестве ключа.
- Объекты класса Phone также содержат строго приватные атрибуты __phone_number, __is_hidden_number и __history.
__phone_number содержит номер телефона в виде строки, и __is_hidden_number - True, если это секретный номер (номер не отображается при звонках) и False в противном случае.
__history - это список, в котором хранятся все вызовы. В нем есть вход для каждого звонка, который содержит номер вызывающего/вызываемого телефона (или значение “privat” для входящих звонков с секретного номера).
- __init__(self, phone_number: str, hidden_number: bool): ожидает номер телефона в виде строки и параметр в виде строки и информацию (в виде bool) о том, является ли это секретным числом. Эти две части информации хранятся в соответствующих частных атрибутах, а список вызовов (история) инициализируется как пустой список. Независимо от того, является ли номер секретным или нет, в global_phone_list создается соответствующая запись (можно считать, что номер телефона еще не используется).
- get_phone_number(self) -> str: возвращает строку ‘hidden’, если номер телефона является секретным. телефона - секретный номер, а в противном случае - номер телефона.
- extend_history(self, number: str) -> None: сохраняет номер строки в новой записи в конце __history, таким образом документируя вызов.
- receives_call(self, calling_phone) -> None: передается объект вызывающего телефона calling_phone. Метод запрашивает номер телефона звонящего (используя get_phone_number), заносит звонок в свой собственный список вызовов (используя extend_history), и печатает короткое сообщение о вызове.
Идея заключается в том, что это сообщение имитирует дисплей вызываемого телефона. Вы можете сами выбрать точное отображение, но оно должно содержать номер вызываемого телефона. номер телефона вызываемого абонента, а также номер вызывающего абонента, как его видит устройство вызываемый телефон. Простым примером может быть incoming call: 133 или incoming call: hidden, если вызов поступает с секретного номера.
- make_call(self, number: str) -> None: выполняет вызов. Если номер телефона номер зарегистрирован в списке global_phone_list, соответствующий телефон будет вызван (путем вызова метода receive_call соответствующего объекта-телефона; вызывающим объектом является вызывающий объект, передается в качестве аргумента посредством self). Впоследствии звонок вносится в список вызовов (с помощью extend_history). Если номер неизвестен, печатается только “XXXXXXXXX”.
- show_call_history(self) -> None: выводит список вызовов.
Выход можно выбрать произвольно. Однако должно быть ясно, к какому телефон (номер телефона), к которому принадлежит список вызовов, каждая запись списка должна быть выведена в формате линия, и номер телефона другого телефона должен быть напечатан. (или “скрытый”, как хранится в списке вызовов).
class Phone: global_phone_list = dict() def __init__(self, phone_number: str, hidden_number: bool): self.phone_number = phone_number self.hidden_number = hidden_number global_phone_list = dict.fromkeys(phone_number[, hidden_number]) def get_phone_number(self) -> str: if hidden_number == False: return phone_number else: return f'hidden' def extend_history(self, number: str) -> None: def receives_call(self, calling_phone) -> None: def make_call(self, number: str) -> None: def show_call_history(self) -> None: def phone_partial_tests() -> None: print('\n__init__():') # phone1 = Phone('+431234', False) # print(phone1.__dict__) # print(Phone.global_phone_list) # # phone2 = Phone('+431007', True) # print(phone2.__dict__) # print(Phone.global_phone_list) # # print('\nget_phone_number():') # print(phone1.get_phone_number()) # print(phone2.get_phone_number()) # # print('\nextend_history:') # phone1.extend_history('+4311707') # print(phone1.__dict__['_Phone__history']) # phone1.extend_history('hidden') # print(phone1.__dict__['_Phone__history']) # phone2.extend_history('not a number') # print(phone2.__dict__['_Phone__history']) # # print('\nreceives_call():') # # phone3 = Phone('+4311000', False) # phone4 = Phone('+4312000', True) # # phone4.receives_call(phone3) # print(phone4.__dict__['_Phone__history']) # # phone3.receives_call(phone4) # print(phone3.__dict__['_Phone__history']) # # print('\nmake_call():') # # phone5 = Phone('192.097', False) # phone6 = Phone('SS2022', True) # # phone5.make_call('SS2022') # print(phone5.__dict__['_Phone__history']) # print(phone6.__dict__['_Phone__history']) # # phone6.make_call('192.097') # print(phone5.__dict__['_Phone__history']) # print(phone6.__dict__['_Phone__history']) # # phone5.make_call('unknown') # print(phone5.__dict__['_Phone__history']) # print(phone6.__dict__['_Phone__history']) def phone_test_basic() -> None: phone1 = Phone('+43101010', False) phone2 = Phone('+43202020', True) phone3 = Phone('+43303030', False) print(Phone.global_phone_list) print() phone2.make_call('+43101010') phone3.make_call('+43101010') phone3.make_call('+43202020') phone2.make_call('+43303030') phone2.make_call('gibtsnicht ') phone1.show_call_history() phone2.show_call_history() phone3.show_call_history('in') def my_own_phone_scenario() -> None: # TODO: implement pass def execute() -> None: phone_partial_tests() # phone_test_basic() # my_own_phone_scenario() if __name__ == '__main__': execute()