Форум сайта python.su
Есть некий Базовый класс, которые реализует набор методов: “идти”, “стоять”, “лежать”
И есть три класса, которые наследуют Базовый и добавляют свою функции (не переопределяя ничего):
класс Первый(Базовый), Второй(Базовый), Третий(Базовый)
Так же имеется класс в котором планиурется использовать методы из Базового и всех его наследников
вопрос!
Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
или может есть какой-то правильный паттерн который правильно это все структурирует и вызывается только один класс?
Офлайн
Опиши, что пытаешься сделать - для чего строишь эту архитектуру.
Офлайн
metotronв такой постановке вопроса достаточно только трех, единственное в чем может бьть “затык” это если у трех классов-наследников есть одноименные методы, тогда там начинаеться тот еще цирк при множественном наследовании, и нужно смотреть что в каком порядке наследуется или ручками писать какой метод откуда тянуть.
Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
metotronможет и есть, но для этого нужно понимать что вы хотите, как выше уже написал py.user.next
или может есть какой-то правильный паттерн который правильно это все структурирует и вызывается только один класс?
[code python][/code]
Отредактировано PEHDOM (Май 24, 2018 11:12:46)
Офлайн
задача простая достаточно
есть хрень под названием Selenium которая имеет некоторые методы для взаимодействия с браузером
Я хотел бы: сделать обертки вокруг некоторых из методов. Например там есть метод element.set_text() которые просто добавляет тескт в некий элемент (например текстовое поле). Так как у меня есть несколько “видов” текстовых полей, то я хотел бы модифицировать этот метод таким образом, чтобы он определял тип поля и в соотсветствии с этим типом по разному этот текст вставлял
Соответственно была мысль создать класс MyElement(WebElement) и там это реализовать
Далее хотелось добавить небольшой набор своих методов, типа element.fill_form который бы заполнял форму используя как “родные” методы Seleniuma так и модифицированные
Соответственно это предполагалось вынести в отдельный класс - наследник предыдущего
PS блин а вобще-то надо глубоко погуглить наследование в питоне - если есть ссылка на хороший мануал - буду признателен
Спасибо
Офлайн
а каким боком сюда вы хотите прикрутить три класса-наследника, а потом еще от них наследовать еще один класс?
[code python][/code]
Офлайн
metotronМетод set_text() менять не надо. Его задача (его функция) - правильно вставить текст, который ему подаётся. Поэтому текст ты должен получить ещё до вызова метода, а потом этот текст уже подать в метод. Так вот, чтобы получить правильный текст, ты должен сделать отдельный класс с такими методами, которые дают разные тексты.
Так как у меня есть несколько “видов” текстовых полей, то я хотел бы модифицировать этот метод таким образом, чтобы он определял тип поля и в соотсветствии с этим типом по разному этот текст вставлял
metotronСделай отдельный класс и туда можешь добавлять что угодно. Чтобы использовать Selenium, необязательно его использовать напрямую. У тебя должен быть свой класс, к экземпляру которого ты можешь подключить объект Selenium'а, и твой класс будет делать свои действия, используя подключенный объект. При этом ты можешь отключить объект Selenium'а от экземпляра, переделать его и подключить обратно. Твой класс не поймёт, что там что-то изменилось, но станет всё делать по-другому. Это и есть агрегация - ты можешь что угодно подключить к своему классу в любой момент при выполнении программы и он станет свои действия делать через это.
Далее хотелось добавить небольшой набор своих методов, типа element.fill_form который бы заполнял форму используя как “родные” методы Seleniuma так и модифицированные
Отредактировано py.user.next (Май 25, 2018 01:13:10)
Офлайн
> Так как каждый из наследников имеет доступ к функциям Базового класса правильнее import все четыре класса или достаточно только наследников трех?
Импортируй то что будешь использовать. Это же очевидно!
Офлайн