c.bar = 'abc'
self.assertEqual(c.__dict__, {'bar': 'abc'})
+ def test_setattr_exceptions(self):
+ class Immutable[T]:
+ def __setattr__(self, key, value):
+ raise RuntimeError("immutable")
+
+ # gh-115165: This used to cause RuntimeError to be raised
+ # when we tried to set `__orig_class__` on the `Immutable` instance
+ # returned by the `Immutable[int]()` call
+ self.assertIsInstance(Immutable[int](), Immutable)
+
def test_subscripted_generics_as_proxies(self):
T = TypeVar('T')
class C(Generic[T]):
self.assertEqual(MyCount([4, 4, 5]), {4: 2, 5: 1})
self.assertEqual(MyCount[int]([4, 4, 5]), {4: 2, 5: 1})
+ def test_instantiate_immutable(self):
+ class C:
+ def __setattr__(self, key, value):
+ raise Exception("should be ignored")
+
+ A = Annotated[C, "a decoration"]
+ # gh-115165: This used to cause RuntimeError to be raised
+ # when we tried to set `__orig_class__` on the `C` instance
+ # returned by the `A()` call
+ self.assertIsInstance(A(), C)
+
def test_cannot_instantiate_forward(self):
A = Annotated["int", (5, 6)]
with self.assertRaises(TypeError):