Форум сайта python.su
Здесь нет наследования. Создайте отдельно класс Bot, отдельно класс BaseAuth. В BaseAuth заведите абстрактный метод authenticate. Абстрактный, то есть каждый класс-наследник должен будет реализовать его по своему. От BaseAuth сделайте наследников LoginAuth, CookieAuth. Переопределите для них метод authenticate. В классе Bot создайте ссылку типа BaseAuth (ну или в питоне тип не нужен, но будем это подразумевать :) ). При необходимости авторизоваться вызывайте метод authenticate объекта, расположенного по этой ссылке. В зависимости от типа (LoginAuth, CookieAuth) аутентификация будет проходить по одному из ваших сценариев.
Офлайн
Если в BaseAuth ничего, кроме абстрактного authenticate не будет, то зачем он? Подразумевать можно и без этого :)
Офлайн
На всякий случай.
Офлайн
Ed, Soteric прав. Абстрагирование — вещь очень полезная.
Офлайн
В данном конкретном примере не вижу ничего полезного. Создается лишний уровень иерархии наследования, который в Питоне не нужен. Это нужно для людей, пришедших с языков с жесткой типизацией для понимания что происходит. Для тех, кто слышал про duck typing это не нужно.
Офлайн
ИМХО восприятие питона как некоего элитарного языка, который не нуждается во всех фенечках придуманных наивными глупыми архитекторами убого кодящих на своих жестко типизированных языках, не идет на пользу его адептам. Сейчас срач наверное будет… меня уже побили на python-forum за то, что я проповедовал разнесение файлов по классам в стиле Java, сейчас и здесь побьют :)
Офлайн
Все гораздо проще - языки принципиально разные, поэтому и подходы разные. Python - не элитарный, он просто другой. И архитектор у него тоже есть и тоже неглупый.
Офлайн
Ed, причем здесь питон? Абстрагирование — это нужно для программирования. Язык — инструмент.
Лучше написать три «ненужных» строчки если так модель будет выглядеть более «правильной» и логичной.
А про «данный пример» говорить вообще бессмысленно — нету полной постановки задачи, есть подозрение что там вообще все по-другому лучше делать.
Офлайн
Под ‘в данном конкретном примере’ я имел в виду это:
Создайте отдельно класс Bot, отдельно класс BaseAuth. В BaseAuth заведите абстрактный метод authenticate. Абстрактный, то есть каждый класс-наследник должен будет реализовать его по своему. От BaseAuth сделайте наследников LoginAuth, CookieAuth. Переопределите для них метод authenticate.Я считаю, что достаточно сделать так:
class LoginAuth:
def authenticate(self):
...
class CookieAuth:
def authenticate(self):
...
class BaseAuth:
def authenticate(self):
raise NotImplementedError
class LoginAuth(BaseAuth):
def authenticate(self):
...
class CookieAuth(BaseAuth):
def authenticate(self)
...
Отредактировано (Янв. 28, 2011 17:22:02)
Офлайн