Уведомления

Группа в Telegram: присоединиться

#1 Май 23, 2018 22:16:56

metotron
Зарегистрирован: 2015-08-20
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

Есть некий Базовый класс, которые реализует набор методов: “идти”, “стоять”, “лежать”
И есть три класса, которые наследуют Базовый и добавляют свою функции (не переопределяя ничего):
класс Первый(Базовый), Второй(Базовый), Третий(Базовый)

Так же имеется класс в котором планиурется использовать методы из Базового и всех его наследников
вопрос!
Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
или может есть какой-то правильный паттерн который правильно это все структурирует и вызывается только один класс?

Офлайн

#2 Май 24, 2018 00:54:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 5844
Репутация: +  532  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

Опиши, что пытаешься сделать - для чего строишь эту архитектуру.



Офлайн

#3 Май 24, 2018 11:06:15

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 884
Репутация: +  158  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

metotron
Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
в такой постановке вопроса достаточно только трех, единственное в чем может бьть “затык” это если у трех классов-наследников есть одноименные методы, тогда там начинаеться тот еще цирк при множественном наследовании, и нужно смотреть что в каком порядке наследуется или ручками писать какой метод откуда тянуть.
вот немного понятной инфы на русском: https://habr.com/post/62203/
metotron
или может есть какой-то правильный паттерн который правильно это все структурирует и вызывается только один класс?
может и есть, но для этого нужно понимать что вы хотите, как выше уже написал py.user.next

Отредактировано PEHDOM (Май 24, 2018 11:12:46)

Офлайн

#4 Май 24, 2018 17:48:52

metotron
Зарегистрирован: 2015-08-20
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

задача простая достаточно
есть хрень под названием Selenium которая имеет некоторые методы для взаимодействия с браузером
Я хотел бы: сделать обертки вокруг некоторых из методов. Например там есть метод element.set_text() которые просто добавляет тескт в некий элемент (например текстовое поле). Так как у меня есть несколько “видов” текстовых полей, то я хотел бы модифицировать этот метод таким образом, чтобы он определял тип поля и в соотсветствии с этим типом по разному этот текст вставлял
Соответственно была мысль создать класс MyElement(WebElement) и там это реализовать
Далее хотелось добавить небольшой набор своих методов, типа element.fill_form который бы заполнял форму используя как “родные” методы Seleniuma так и модифицированные
Соответственно это предполагалось вынести в отдельный класс - наследник предыдущего

PS блин а вобще-то надо глубоко погуглить наследование в питоне - если есть ссылка на хороший мануал - буду признателен
Спасибо

Офлайн

#5 Май 24, 2018 22:38:36

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 884
Репутация: +  158  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

а каким боком сюда вы хотите прикрутить три класса-наследника, а потом еще от них наследовать еще один класс?

Офлайн

#6 Май 25, 2018 01:05:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 5844
Репутация: +  532  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

metotron
Так как у меня есть несколько “видов” текстовых полей, то я хотел бы модифицировать этот метод таким образом, чтобы он определял тип поля и в соотсветствии с этим типом по разному этот текст вставлял
Метод set_text() менять не надо. Его задача (его функция) - правильно вставить текст, который ему подаётся. Поэтому текст ты должен получить ещё до вызова метода, а потом этот текст уже подать в метод. Так вот, чтобы получить правильный текст, ты должен сделать отдельный класс с такими методами, которые дают разные тексты.

Наследования надо избегать, так как оно сковывает программу. После запуска программы ты не можешь менять связи, которые создаются при наследовании. Его заменяют агрегацией. Так что если хочешь наследовать что-то, лучше сделать это без наследования.

metotron
Далее хотелось добавить небольшой набор своих методов, типа element.fill_form который бы заполнял форму используя как “родные” методы Seleniuma так и модифицированные
Сделай отдельный класс и туда можешь добавлять что угодно. Чтобы использовать Selenium, необязательно его использовать напрямую. У тебя должен быть свой класс, к экземпляру которого ты можешь подключить объект Selenium'а, и твой класс будет делать свои действия, используя подключенный объект. При этом ты можешь отключить объект Selenium'а от экземпляра, переделать его и подключить обратно. Твой класс не поймёт, что там что-то изменилось, но станет всё делать по-другому. Это и есть агрегация - ты можешь что угодно подключить к своему классу в любой момент при выполнении программы и он станет свои действия делать через это.



Отредактировано py.user.next (Май 25, 2018 01:13:10)

Офлайн

#7 Май 25, 2018 11:30:23

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 1852
Репутация: +  126  -
Профиль   Отправить e-mail  

Вопрос про правильность архитектуры

> Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?

Импортируй то что будешь использовать. Это же очевидно!



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version