В Python, в операции чисел смешанного типа, более узкий тип расширен больше, чем у другого, например int + float → float:
In [57]: 3 + 0.1
Out[57]: 3.1
Но для datetime.date имеем datetime.date + datetime.timedelta → datetime.date, а не datetime.datetime:
In [58]: datetime.date(2013, 1, 1) + datetime.timedelta(seconds=42)
Out[58]: datetime.date(2013, 1, 1)
Почему расширенное рассуждение применяется к числам, но не к date/datetime/timedelta?
(Фон: я пишу процедуру чтения для формата файла, где одно поле - год, одно поле - в день года, одно поле - миллисекунды с полуночи. Конечно, простое и явное решение datetime.datetime(2013, 1, 1, 0, 0, 0) + datetime.timedelta(seconds=42), но можно было бы также обосновать, что следует переписать 3 + 0.1 как 3.0 + 0.1)