Найти - Пользователи
Полная версия: Класс Телефон
Начало » Python для новичков » Класс Телефон
1
Melchior1xD
Помогите, пожалуйста, с созданием класса телефон

Класс 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()
py.user.next
__init__() у тебя неправильный. Имена атрибутов должны быть с подчёркиваниями, как написано в задании. А список заполняется вообще синтаксически некорректно.

Так что сначала изучи синтаксис питона.

Melchior1xD
  
return f'hidden'
Ты вообще понимаешь, зачем ставится f перед строкой? Если не понимаешь, то зачем ставишь?

Не зная синтаксиса питона, ты пытаешься на нём что-то записывать. Это как не зная карандаша, ты пытаешься нарисовать им кошку, перевернув карандаш грифелем к себе, а тупым концом, на котором грифеля нет, пытаешься нарисовать что-то на бумаге. Сначала карандаш изучи, прежде чем пытаться рисовать им.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB