Форум сайта python.su
bootcdНу вот ты код написал, когда ещё ничего не разработано. Это для красоты просто.py.user.nextСкорее я опишу абстракцию “Разговор людей”, где свойством “участники” будет список, состоящий, например из объектов людей, а методами, например “фиксация разговора”, в виде “запись разговора на диктофон”, если абстракцию “Разговор людей” я через наследование, например, могу выделить в абстракцию “Интервью” или метод “запись разговора на видео”, если это будет наследник - “Видеоподкаст”.
Вот у тебя два человека общаются стоят. Ты что будешь описывать? Абстракцию Человек и ещё одну абстракцию Человек?
Что-то типа:Вот так на данный момент я понимаю самые простые конструкции ООП. Где я понимаю неверно?class Human: pass class TalkingPerson(Human): def __init__(self, name, role): self.role: str = role self.name: str = name class Talking: def __init__(self, members): self.members: list[TalkingPerson] = members def get_fixation(self): pass def get_info(self): pass class Interview(Talking): def __init__(self, members): super().__init__(members) def get_fixation(self, dictofon_recording_file=None): # record works return dictofon_recording_file def get_info(self): return f"{self.members[0].name} задает вопросы {self.members[1].name} и записывает на диктофон ответы." class VideoPodcast(Talking): def __init__(self, members): super().__init__(members) def get_info(self): return f"{self.members[0].name} ведет подкаст с гостем {self.members[1].name} и записывает видео." def get_fixation(self, videostaff_recording_file=None): # record works return videostaff_recording_file person1 = TalkingPerson('Васян', 'журналист') person2 = TalkingPerson('Толян', 'интервьюируемый') interview = Interview([person1, person2]) interview_file = interview.get_fixation() interview_info = interview.get_info() person3 = TalkingPerson('Иванов', 'подкастер') person4 = TalkingPerson('Зубарев', 'гость') videopodcast = VideoPodcast([person3, person4]) videopodcast_file = videopodcast.get_fixation() videopodcast_info = videopodcast.get_info() print(interview_info) print(videopodcast_info)
py.user.nextИ тут один из них спрашивает другого “слушай, а напомни мне, как тебя зовут?”, другой ему отвечает “меня зовут Коля”, а первый говорит “хорошо, я запомню” и запоминает.
Вот у тебя два человека общаются стоят.
bootcdИ ему надо добавить в него теперь вот эту ситуацию. Прикол в том, что он тебе тоже может передать красивый код, а добавлять в него надо будет тебе. Кто не добавил, тот и виноват во всём. Но самый прикол будет, когда тебе твой же код передадут.
Вот у меня есть условный коллега, для которого я пишу этот класс. Написал - отдал.
Отредактировано py.user.next (Май 4, 2024 02:50:45)
Офлайн
RodegastДа это обычное дело. Это полиморфный метод. Но даже при наличии этой семантики в языке, это никак не поможет его спроектировать. Он же не проектирует ничего, вон сразу бросился код писать, будто код ему правильную архитектуру построит, если он его писать начнёт поскорее. Стандартная ошибка школоты.
Ты удивишься, но у объекта может быть несколько конструкторов каждый под свои условия. Это распространено в java, c# и подобных языках в python-е это сделать сложнее, но всё рано можно.
RodegastНе, там имеется в виду, что если у тебя статические методы копятся вперемешку с обычными методами, то это признак того, что ты эти статические методы не туда засунул и загрязнил объект (внутри объекта находится то, что должно быть снаружи него). Это понижение связности. Все методы объекта должны быть собраны вокруг его функции, которую он выполняет, и должны работать на выполнение этой функции.bootcdНе надо на них внимание обращать, у них свой ООП со своими приколами.
А у тех же джавистов написано, что если у вас в классе есть статические методы (по моему ,приводили - если больше одного), то ваш класс криво спроектирован.
Офлайн
py.user.nextВот, не поверите!
Да это обычное дело. Это полиморфный метод. Но даже при наличии этой семантики в языке, это никак не поможет его спроектировать. Он же не проектирует ничего, вон сразу бросился код писать, будто код ему правильную архитектуру построит, если он его писать начнёт поскорее. Стандартная ошибка школоты.
py.user.next
Стандартная ошибка школоты.
Офлайн
bootcdНу ты вот сарай строить собрался, ты его как строишь? Начинаешь куда-то доски прибивать. А надо как его строить? Надо сначала его придумать. Потом надо его продумать. Потом под это всё подобрать материалы. Также надо выделить время, одежду, инструменты. И только потом его можно строить, прибивая доски. Что в этом непонятного? По-моему, это знают все. Это азы.
где изначально учат проектировать?
bootcdПотому что это продаётся хорошо и дурачки это активно покупают. Просто мода такая. Потом ни одной программы сделать не могут. Нет у них ни одной программы в ООП. Классы написаны, как у тебя, а ООП в них нет. И вот они как раз начинают потом гнать, что ООП - это такая лажа для красоты просто. При этом ООП - это не лажа, они просто не знают его и не умеют его применять, чтобы получать эти эффекты.
Везде учат синтаксису.
bootcdЭто не распальцовки. Мы-то всего достигли уже. У нас уже всё есть. Ты не можешь проскочить это, это так не работает. Это как стать великим архитектором через интенсивный скоростной курс.
и выслушал про себя “школота” и прочие помидорные распальцовки
bootcdТы тут не один. Сегодня ты есть, завтра тебя нет. Поэтому я пишу не столько для тебя, сколько для всех, кто здесь есть сегодня и кто здесь будет завтра. Вот для них это пишется. Потому что есть люди, которые хотят научиться, а не выёживаться тут сидеть, охреневая от своей гениальности и любуясь в зеркальце на себя замечательного.
Через “карандаши”, “уметь программировать” и кошек с собаками, пытаюсь вот понять связанность.
Офлайн
> Чтобы прояснить момент именно по проектированию. Код я пишу, чтобы показать проблему.
В проектировании кода без анализа требований к самому проекту нет никакого смысла. Например тот вариант с классами который я тебе написал подойдёт если у тебя справочные данные, а если тебе понадобятся транзакции, то будет больно. Не существует какой то “правильной архитектуры” всё очень индивидуально.
Офлайн
py.user.nextВы очень много пишите текста.
Ты тут не один. Сегодня ты есть, завтра тебя нет. Поэтому я пишу не столько для тебя, сколько для всех, кто здесь есть сегодня и кто здесь будет завтра. Вот для них это пишется. Потому что есть люди, которые хотят научиться, а не выёживаться тут сидеть, охреневая от своей гениальности и любуясь в зеркальце на себя замечательного.
py.user.next
Потому что это продаётся хорошо и дурачки это активно покупают. Просто мода такая. Потом ни одной программы сделать не могут. Нет у них ни одной программы в ООП. Классы написаны, как у тебя, а ООП в них нет. И вот они как раз начинают потом гнать, что ООП - это такая лажа для красоты просто. При этом ООП - это не лажа, они просто не знают его и не умеют его применять, чтобы получать эти эффекты.
py.user.nextПосоветуйте тогда, если можно.
Ты возьми книжки по возведению сараев и хотя бы их прочитай.
py.user.nextРасскажите пожалуйста, как вы к этому пришли. Попробую впитать ваш опыт.
Мы-то всего достигли уже. У нас уже всё есть.
Офлайн
Rodegast
> Например тот вариант с классами который я тебе написал подойдёт если у тебя справочные данные, а если тебе понадобятся транзакции, то будет больно.
Офлайн
> Мне нужен алгоритм того, как прийти к пониманию того, что в таком-то случае “будет больно”, а в таком нет.
Нет такого алгоритма. Начни делать проекты в одиночку и чем сложнее тем лучше. Через пару лет всему научишься.
> Если про работу с СУБД, то я создал модели sqlalchemy
Имелись в виду именно транзакции в СУБД. Дурацкий вопрос - ты SQL знаешь?
Офлайн
Rodegast
> Начни делать проекты в одиночку и чем сложнее тем лучше.
Rodegast
Дурацкий вопрос - ты SQL знаешь?
Офлайн
bootcdЭто такая ловушка, думать, что нужно сразу написать идеальное приложение, которое будет хорошо работать и расширяться. Для этого хочется получить информацию, как их нужно писать, типа сэкономить время, зачем самому наступать на грабли и тд. Вы не первый кто об этом спрашивает, и информации здесь от которой можно прозреть не дадут. Кто умеет создавать приложения, занимается тем,что создает приложения. Он не пишет книги про идеальные программы, у него нет времени на это.Соответственно тот, кто пишет книги про то, как писать программы, сам не особо этим занят, раз есть время возиться с книгами.
Вот я как раз не могу уловить эти моменты. Мне нужен алгоритм того, как прийти к пониманию того, что в таком-то случае “будет больно”, а в таком нет.
Офлайн