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

Так же имеется класс в котором планиурется использовать методы из Базового и всех его наследников
вопрос!
Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
или может есть какой-то правильный паттерн который правильно это все структурирует и вызывается только один класс?
py.user.next
Опиши, что пытаешься сделать - для чего строишь эту архитектуру.
PEHDOM
metotron
Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
в такой постановке вопроса достаточно только трех, единственное в чем может бьть “затык” это если у трех классов-наследников есть одноименные методы, тогда там начинаеться тот еще цирк при множественном наследовании, и нужно смотреть что в каком порядке наследуется или ручками писать какой метод откуда тянуть.
вот немного понятной инфы на русском: https://habr.com/post/62203/
metotron
или может есть какой-то правильный паттерн который правильно это все структурирует и вызывается только один класс?
может и есть, но для этого нужно понимать что вы хотите, как выше уже написал py.user.next
metotron
задача простая достаточно
есть хрень под названием Selenium которая имеет некоторые методы для взаимодействия с браузером
Я хотел бы: сделать обертки вокруг некоторых из методов. Например там есть метод element.set_text() которые просто добавляет тескт в некий элемент (например текстовое поле). Так как у меня есть несколько “видов” текстовых полей, то я хотел бы модифицировать этот метод таким образом, чтобы он определял тип поля и в соотсветствии с этим типом по разному этот текст вставлял
Соответственно была мысль создать класс MyElement(WebElement) и там это реализовать
Далее хотелось добавить небольшой набор своих методов, типа element.fill_form который бы заполнял форму используя как “родные” методы Seleniuma так и модифицированные
Соответственно это предполагалось вынести в отдельный класс - наследник предыдущего

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

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

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

Импортируй то что будешь использовать. Это же очевидно!
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