mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
gh-95388: Deprecate creating immutable types with mutable bases (GH-95533)
This commit is contained in:
parent
000c3874bf
commit
a613fedd6e
5 changed files with 80 additions and 0 deletions
|
@ -15,6 +15,7 @@ import textwrap
|
|||
import threading
|
||||
import time
|
||||
import unittest
|
||||
import warnings
|
||||
import weakref
|
||||
from test import support
|
||||
from test.support import MISSING_C_DOCSTRINGS
|
||||
|
@ -644,6 +645,34 @@ class CAPITest(unittest.TestCase):
|
|||
with self.assertRaises(SystemError):
|
||||
_testcapi.create_type_from_repeated_slots(variant)
|
||||
|
||||
def test_immutable_type_with_mutable_base(self):
|
||||
# Add deprecation warning here so it's removed in 3.14
|
||||
warnings._deprecated(
|
||||
'creating immutable classes with mutable bases', remove=(3, 14))
|
||||
|
||||
class MutableBase:
|
||||
def meth(self):
|
||||
return 'original'
|
||||
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
ImmutableSubclass = _testcapi.make_immutable_type_with_base(
|
||||
MutableBase)
|
||||
instance = ImmutableSubclass()
|
||||
|
||||
self.assertEqual(instance.meth(), 'original')
|
||||
|
||||
# Cannot override the static type's method
|
||||
with self.assertRaisesRegex(
|
||||
TypeError,
|
||||
"cannot set 'meth' attribute of immutable type"):
|
||||
ImmutableSubclass.meth = lambda self: 'overridden'
|
||||
self.assertEqual(instance.meth(), 'original')
|
||||
|
||||
# Can change the method on the mutable base
|
||||
MutableBase.meth = lambda self: 'changed'
|
||||
self.assertEqual(instance.meth(), 'changed')
|
||||
|
||||
|
||||
def test_pynumber_tobase(self):
|
||||
from _testcapi import pynumber_tobase
|
||||
self.assertEqual(pynumber_tobase(123, 2), '0b1111011')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue