Ответы пользователя по тегу ООП
  • Как правильно переопределить конструктор класса?

    @adv-tsk
    Full Stack Web Developer
    Это происходит потому, что конструктор класса date принимает всего три аргумента: year, month, day, а Вы пытаетесь передать ему дополнительные аргументы. Вот как Вы должны были поступить в Вашем случае:

    class MyClass(date):
    
        __slots__ = '_expiry',
    
        def __new__(cls, m_year, m_month, m_day, expiry=None, *args, **kwargs):
            return super(MyClass, cls).__new__(cls, m_year, m_month, m_day)
    
        def __init__(self, m_year, m_month, m_day, expiry=None, *args, **kwargs):
            if expiry:
                self._expiry = expiry
            else:
                self._expiry = date(m_year, m_month, m_day)
    
        @property
        def expiry(self):
            return {'year': self._expiry.year,
                    'month': self._expiry.month,
                    'day': self._expiry.day}
    
    >>> q = MyClass(2015, 5, 5, expiry=date(2015, 5, 1))
    >>> print(q.expiry)
    >>> {'year': 2015, 'day': 1, 'month': 5}

    UPD: То что Вы называете конструктором класса, является инициализатором класса, т.е. тот самый метод __init__(). Конструктором класса является метод __new__().
    Ответ написан
    3 комментария