Форум сайта python.su
Добрый день.
Прошу помощи в правильно наследование от класса.
Есть вот такой код:
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)
Офлайн
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)
Офлайн
scidam
Плохой совет. Вы забыли второе правило дзена - явное лучше неявного.
В стартовом посте функция спроектирована лучше, сразу видно сколько аргументов функция принимает, какие обязательные какие нет, имена аргументов сами говорят за их предназначение. Программист, который будет работать с этой функцией без справки поймет что в неё передавать, ваш вариант делает функцию непонятной. args следует применять, если в функцию передают заранее неизвестное количество однотипных данных.
Офлайн
Согласен, мне бы поначалу, что то попроще.
Хотя в целом идея ясна. Спасибо.
Офлайн