Найти - Пользователи
Полная версия: Как сделать класс телефонная книга?
Начало » Python для новичков » Как сделать класс телефонная книга?
1 2 3 4
4kpt
py.user.next
когда будешь писать что-нибудь больше ста строк, тогда и поймёшь
Программа для работы с сайтом: 10 классов по 800-1200 строк.

Это к слову.
py.user.next
пропринтовать что ?
Экземпляр класса. Ведь Вы наследуете и метод __str__ и __repr__ автоматом.

P.S. Вы по поводу повтора существуещего кода ничего так и не сказали :)

py.user.next
4kpt
Программа для работы с сайтом: 10 классов по 800-1200 строк.
это всё слова, причём очень подозрительные ;)

4kpt
Экземпляр класса. Ведь Вы наследуете и метод __str__ и __repr__ автоматом.
он не написан, а в голове

4kpt
P.S. Вы по поводу повтора существуещего кода ничего так и не сказали :)
это не повтор
книга пишется сверху вниз (отбрасывает лишние переписывания в отличие от “снизу вверх”)
когда её интерфейс готов, она завершена, реализуется содержимое её методов (при этом можно сделать заглушки так, что ты её не отличишь от полностью реализованной)
словарь там будет или не словарь - вообще неважно
она может хранить внутренние данные вообще в каком-нибудь сложном объекте, про который не нужно знать, чтобы ею пользоваться
4kpt
Хорошо. Давайте пример возьмем более корректный.
Необходимо написать конвертер фотографий.
Как это можно сделать:
Вариант 1.
- Написать класс, который будет самостоятельно реализовывать хранилище объектов открытых фотографий или путей к фотографиям + дописать методы, которые будут с этим хранилищем работать (добавить фото в хранилище, достать фото из хранилища, удалить и т.п.);
Вариант 2.
Написать два класса. Первый из них мы формируем сами. Экземпляры этого класса являются объектами открытых фотографий или путей к фотографиям с методами работы с фотографиями (конвертация, изменение размера и т.п.). Второй класс, который был унаследован от списка хранит ссылки на экземпляры первого.
Так как второй класс изначально унаследован от списка, соответственно он обладает всеми его методам.
Неужели действие метода pop этого класса может вызвать какие-то сомнения. Или метод del, или метод append или метод len… При этом мы получаем “на шару” все механизмы списка. Единственное, что нужно не забыть, так это написать в первом классе метод __str__ и __repr__, чтобы при
print instance_two_class
Выводилось корректное отображение. Ну например такое:
["<open file: 1.jpeg>", "<open file: 2.jpeg>", "<open file: 3.jpeg>"]
А
print instance_two_class[0]
В этом случае может отобразить
name: "1.jpg"
path: "c:\foto"
size: [200, 200]
....
А забыл написать. Желательно еще во втором варианте дописать несколько своих методов для пакетной обработки…

P.S. Хотя здесь бы еще не помешал третий класс именно для управлением пакетной обработкой :)
4kpt
py.user.next
это всё слова, причём очень подозрительные ;)
Мне серенево Ваше недоверие :)
doza_and
Soteric
Клиент видит два понятных ему метода. Он не знает, что это словарь.
Я поддержу 4kpt. Предлагается сделать интерфейс к телефонной книге создавая методы addSubscriber removeSubscriber и т.п. А почему не insertFriend и killFriend? Пользователю программы или самому разработчику через пол года будет удобно вспоминать эти названия, или ковыряться в документации?

Очень плохо что я не знаю что этот объект похож на словарь. Как работает словарь я знаю, а ваш класс я вижу впервые.
Откуда вы взяли что эти методы мне понятны. Например addSubscriber(self, name, number) может добавлять существющему пользователю новый телефон и ничего не делать если пользователя нет, что возвращает данный метод, как он будет себя вести если два раза добавить один телефон если один телефон добавить разным пользователям…. ?. Мне потребуется куча времени чтобы понять как работает ваш класс, а вам куча времени чтобы написать документацию.

Думаю надо стремиться сделать интерфейс максимально понятным. Один из путей по возможности сводить его к набору стандартных шаблонов, к каковым в питоне относятся словари списки и т.п.

Телефонная книга это что? Неупорядоченная коллекция уникальных элементов (людей с множеством телефонов у каждого) с интерфейсом быстрой вставки и удаления. Подойдет set. Реализовывать можете как угодно (я тоже считаю как и 4kpt что правильнее всего наследоваться от set). Если будут проблемы - реализацию можно изменить, а интерфейс оставить совпадающий с set.
Нужен быстрый поиск по ФИО. Ок это гомоморфное отображение. В сишной терминологии multimap. В питоне это UserDict элементы которого, итерируемые объекты, а именно найденные однофамильцы. В данном случае не вижу причин использовать другой самопридуманный интерфейс. И так далее.
Возможный шаблон проекта
class HumanPhones(object):
      u"""запись про человека - фио и список его телефонов"""
      def __init__(self,name,phonelist):
            self.name = name
            self.phonelist = phonelist
class PhoneQuery(UserDict):
     u"""ведет как словарь по имени дает список однофамильцев каждый из которых со списком телефонов"""
class PhoneBook(set):
    u"""множество людей (set)
          - интерфейс поиска людей по заданной фамилии осуществляет объект name2human_list"""
    def __init__(self):
         name2human_list=PhoneQuery()
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