summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2024-01-26 08:33:13 (GMT)
committerGitHub <noreply@github.com>2024-01-26 08:33:13 (GMT)
commit456e274578dc9863f42ab24d62adc0d8c511b50f (patch)
tree48e67a314ec95efe6bf710f982ea9238e4b0a610
parentb69548a0f52418b8a2cf7c7a885fdd7d3bfb1b0b (diff)
downloadcpython-456e274578dc9863f42ab24d62adc0d8c511b50f.zip
cpython-456e274578dc9863f42ab24d62adc0d8c511b50f.tar.gz
cpython-456e274578dc9863f42ab24d62adc0d8c511b50f.tar.bz2
gh-112451: Prohibit subclassing of datetime.timezone. (#114190)
This is consistent with C-extension datetime.timezone.
-rw-r--r--Lib/_pydatetime.py3
-rw-r--r--Lib/test/datetimetester.py4
-rw-r--r--Misc/NEWS.d/next/Library/2024-01-24-20-11-46.gh-issue-112451.7YrG4p.rst2
3 files changed, 9 insertions, 0 deletions
diff --git a/Lib/_pydatetime.py b/Lib/_pydatetime.py
index bca2acf..3551453 100644
--- a/Lib/_pydatetime.py
+++ b/Lib/_pydatetime.py
@@ -2347,6 +2347,9 @@ class timezone(tzinfo):
"timedelta(hours=24).")
return cls._create(offset, name)
+ def __init_subclass__(cls):
+ raise TypeError("type 'datetime.timezone' is not an acceptable base type")
+
@classmethod
def _create(cls, offset, name=None):
self = tzinfo.__new__(cls)
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index 8bda173..53ad5e5 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -301,6 +301,10 @@ class TestTimeZone(unittest.TestCase):
self.assertIsInstance(timezone.utc, tzinfo)
self.assertIsInstance(self.EST, tzinfo)
+ def test_cannot_subclass(self):
+ with self.assertRaises(TypeError):
+ class MyTimezone(timezone): pass
+
def test_utcoffset(self):
dummy = self.DT
for h in [0, 1.5, 12]:
diff --git a/Misc/NEWS.d/next/Library/2024-01-24-20-11-46.gh-issue-112451.7YrG4p.rst b/Misc/NEWS.d/next/Library/2024-01-24-20-11-46.gh-issue-112451.7YrG4p.rst
new file mode 100644
index 0000000..126ca36
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-01-24-20-11-46.gh-issue-112451.7YrG4p.rst
@@ -0,0 +1,2 @@
+Prohibit subclassing pure-Python :class:`datetime.timezone`. This is consistent
+with C-extension implementation. Patch by Mariusz Felisiak.