Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2017 17:10:26

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Верное наследование от класса.

Добрый день.
Прошу помощи в правильно наследование от класса.
Есть вот такой код:

 class MyHandler(logging.handlers.SMTPHandler):
    def __init__(self, mailhost, fromaddr, toaddrs, subject,
                 credentials=None, secure=None, timeout=5.0):
        logging.handlers.SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject,
                         credentials=None, secure=None, timeout=5.0)
хочу в мой класс добавить еще один параметр (file) и получить такой вид
def __init__(self, mailhost, fromaddr, toaddrs, subject, file,
credentials=None, secure=None, timeout=5.0):

как верно это сделать?
спасибо.

Офлайн

#2 Янв. 16, 2017 05:28:26

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Верное наследование от класса.

 def __init__(self, *args, **kwargs):
     if len(args) != 5:
         raise TypeError('MyHandler constructor takes 5 positional arguments but %s were given' % len(args))
     else:
         self.file = args[-1]  # теперь в других методах MyHandler можно сослаться на file как на self.file
         new_args = args[:-1]
         super().__init__(*new_args, **kwargs)

Офлайн

#3 Янв. 16, 2017 06:09:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Верное наследование от класса.

scidam
Плохой совет. Вы забыли второе правило дзена - явное лучше неявного.
В стартовом посте функция спроектирована лучше, сразу видно сколько аргументов функция принимает, какие обязательные какие нет, имена аргументов сами говорят за их предназначение. Программист, который будет работать с этой функцией без справки поймет что в неё передавать, ваш вариант делает функцию непонятной. args следует применять, если в функцию передают заранее неизвестное количество однотипных данных.



Офлайн

#4 Янв. 16, 2017 19:40:48

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Верное наследование от класса.

Согласен, мне бы поначалу, что то попроще.
Хотя в целом идея ясна. Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version