summaryrefslogtreecommitdiffstats
path: root/Lib/datetime.py
diff options
context:
space:
mode:
authorPaul Ganssle <pganssle@users.noreply.github.com>2019-02-04 19:42:04 (GMT)
committerAlexander Belopolsky <abalkin@users.noreply.github.com>2019-02-04 19:42:04 (GMT)
commit89427cd0feae25bbc8693abdccfa6a8c81a2689c (patch)
treec08a1bb264e74eec38f488fa60c3889fae424f2c /Lib/datetime.py
parentca7d2933a388677cc3bbc621913b479452c0f25a (diff)
downloadcpython-89427cd0feae25bbc8693abdccfa6a8c81a2689c.zip
cpython-89427cd0feae25bbc8693abdccfa6a8c81a2689c.tar.gz
cpython-89427cd0feae25bbc8693abdccfa6a8c81a2689c.tar.bz2
bpo-32417: Make timedelta arithmetic respect subclasses (#10902)
* Make timedelta return subclass types Previously timedelta would always return the `date` and `datetime` types, regardless of what it is added to. This makes it return an object of the type it was added to. * Add tests for timedelta arithmetic on subclasses * Make pure python timedelta return subclass types * Add test for fromtimestamp with tz argument * Add tests for subclass behavior in now * Add news entry. Fixes: bpo-32417 bpo-35364 * More descriptive variable names in tests Addresses Victor's comments
Diffstat (limited to 'Lib/datetime.py')
-rw-r--r--Lib/datetime.py10
1 files changed, 5 insertions, 5 deletions
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 4780b6d..89c32c0 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -1014,7 +1014,7 @@ class date:
if isinstance(other, timedelta):
o = self.toordinal() + other.days
if 0 < o <= _MAXORDINAL:
- return date.fromordinal(o)
+ return type(self).fromordinal(o)
raise OverflowError("result out of range")
return NotImplemented
@@ -2024,10 +2024,10 @@ class datetime(date):
hour, rem = divmod(delta.seconds, 3600)
minute, second = divmod(rem, 60)
if 0 < delta.days <= _MAXORDINAL:
- return datetime.combine(date.fromordinal(delta.days),
- time(hour, minute, second,
- delta.microseconds,
- tzinfo=self._tzinfo))
+ return type(self).combine(date.fromordinal(delta.days),
+ time(hour, minute, second,
+ delta.microseconds,
+ tzinfo=self._tzinfo))
raise OverflowError("result out of range")
__radd__ = __add__