diff options
author | Paul Ganssle <pganssle@users.noreply.github.com> | 2019-02-04 19:42:04 (GMT) |
---|---|---|
committer | Alexander Belopolsky <abalkin@users.noreply.github.com> | 2019-02-04 19:42:04 (GMT) |
commit | 89427cd0feae25bbc8693abdccfa6a8c81a2689c (patch) | |
tree | c08a1bb264e74eec38f488fa60c3889fae424f2c /Lib/datetime.py | |
parent | ca7d2933a388677cc3bbc621913b479452c0f25a (diff) | |
download | cpython-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.py | 10 |
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__ |