Вот как я решил это для класса YearQuarter
, который мне пришлось создать. Я создал __init__
с единственным параметром под названием value
. Код для __init__
просто решает, к какому типу относится параметр value
, и соответственно обрабатывает данные. Если вам нужны несколько входных параметров, вы просто упаковываете их в один кортеж и проверяете, является ли value
кортежем.
Вы используете это так:
>>> temp = YearQuarter(datetime.date(2017, 1, 18))
>>> print temp
2017-Q1
>>> temp = YearQuarter((2017, 1))
>>> print temp
2017-Q1
А вот так __init__
и остальные члены класса выглядят так:
import datetime
class YearQuarter:
def __init__(self, value):
if type(value) is datetime.date:
self._year = value.year
self._quarter = (value.month + 2) / 3
elif type(value) is tuple:
self._year = int(value[0])
self._quarter = int(value[1])
def __str__(self):
return '{0}-Q{1}'.format(self._year, self._quarter)
Конечно, вы можете расширить __init__
несколькими сообщениями об ошибках. Я опустил их для этого примера.