Найти - Пользователи
Полная версия: Верное наследование от класса.
Начало » Python для новичков » Верное наследование от класса.
1
ivn
Добрый день.
Прошу помощи в правильно наследование от класса.
Есть вот такой код:
 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):

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