Skip to content

Commit 151624a

Browse files
committed
requested changes
1 parent bc1faff commit 151624a

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

Lib/test/test_syntax.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2629,13 +2629,20 @@ def test_continuation_bad_indentation(self):
26292629
def test_disallowed_type_param_names(self):
26302630
# See gh-128632
26312631

2632-
for name in ('__class__', '__classdict__', '__classcell__', '__classdictcell__'):
2633-
self._check_error(f"class A[{name}]: pass",
2634-
f"reserved name '{name}' cannot be used for type parameter")
2635-
self._check_error(f"def f[{name}](): pass",
2636-
f"reserved name '{name}' cannot be used for type parameter")
2637-
self._check_error(f"type T[{name}] = tuple[{name}]",
2638-
f"reserved name '{name}' cannot be used for type parameter")
2632+
self._check_error(f"class A[__classdict__]: pass",
2633+
f"reserved name '__classdict__' cannot be used for type parameter")
2634+
self._check_error(f"def f[__classdict__](): pass",
2635+
f"reserved name '__classdict__' cannot be used for type parameter")
2636+
self._check_error(f"type T[__classdict__] = tuple[__classdict__]",
2637+
f"reserved name '__classdict__' cannot be used for type parameter")
2638+
2639+
# These compilations are here to make sure __class__, __classcell__ and __classdictcell__
2640+
# don't break in the future like __classdict__ did in this case.
2641+
for name in ('__class__', '__classcell__', '__classdictcell__'):
2642+
compile(f"""
2643+
class A:
2644+
class B[{name}]: pass
2645+
""", "<testcase>", mode="exec")
26392646

26402647
@support.cpython_only
26412648
def test_nested_named_except_blocks(self):

Python/symtable.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2517,10 +2517,7 @@ symtable_visit_type_param_bound_or_default(
25172517
struct symtable *st, expr_ty e, identifier name,
25182518
type_param_ty tp, const char *ste_scope_info)
25192519
{
2520-
if (_PyUnicode_Equal(name, &_Py_ID(__class__)) ||
2521-
_PyUnicode_Equal(name, &_Py_ID(__classdict__)) ||
2522-
_PyUnicode_Equal(name, &_Py_ID(__classcell__)) ||
2523-
_PyUnicode_Equal(name, &_Py_ID(__classdictcell__))) {
2520+
if (_PyUnicode_Equal(name, &_Py_ID(__classdict__))) {
25242521

25252522
PyObject *error_msg = PyUnicode_FromFormat("reserved name '%U' cannot be "
25262523
"used for type parameter", name);

0 commit comments

Comments
 (0)