diff --git a/src/python/pants/util/meta.py b/src/python/pants/util/meta.py index 9d66d63af156..875a487763a9 100644 --- a/src/python/pants/util/meta.py +++ b/src/python/pants/util/meta.py @@ -190,4 +190,4 @@ def new_setattr(self, key: str, value: Any) -> None: cls.__init__ = new_init # type: ignore[assignment] cls.__setattr__ = new_setattr # type: ignore[assignment] - return frozen_after_init.define_instance_of(cls) + return cls diff --git a/tests/python/pants_test/util/test_meta.py b/tests/python/pants_test/util/test_meta.py index 2ddf62306d76..dd7ec88a3936 100644 --- a/tests/python/pants_test/util/test_meta.py +++ b/tests/python/pants_test/util/test_meta.py @@ -266,6 +266,19 @@ class C: self.assertEqual(C._decorated_type_checkable_type, type(f)) self.assertTrue(f.is_instance(C)) + # Check that .is_instance() is only true for exactly the decorator @g used on the class D! + @decorated_type_checkable + def g(cls): + return g.define_instance_of(cls) + + @g + class D: + pass + + self.assertEqual(D._decorated_type_checkable_type, type(g)) + self.assertTrue(g.is_instance(D)) + self.assertFalse(f.is_instance(D)) + class FrozenAfterInitTest(unittest.TestCase):