Skip to content

Commit 4987095

Browse files
committed
don't overwrite __name__ with __qualname__
1 parent 61d66e4 commit 4987095

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

src/attr/_make.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,7 @@ def wrap(cls):
285285
cls_dict.pop(ca_name, None)
286286
cls_dict.pop('__dict__', None)
287287

288-
if repr_ns is None:
289-
cls_name = getattr(cls, "__qualname__", cls.__name__)
290-
else:
291-
cls_name = cls.__name__
292-
293-
cls = type(cls_name, cls.__bases__, cls_dict)
288+
cls = type(cls.__name__, cls.__bases__, cls_dict)
294289

295290
return cls
296291

tests/test_make.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,21 @@ class D(object):
287287
pass
288288
assert "C.D()" == repr(C.D())
289289

290+
@pytest.mark.skipif(PY2, reason="__qualname__ is PY3-only.")
291+
@given(slots_outer=booleans(), slots_inner=booleans())
292+
def test_name_not_overridden(self, slots_outer, slots_inner):
293+
"""
294+
On Python 3, __name__ should not be the same as __qualname__ for nested classes.
295+
"""
296+
@attributes(slots=slots_outer)
297+
class C(object):
298+
@attributes(slots=slots_inner)
299+
class D(object):
300+
pass
301+
302+
assert C.D.__name__ == "D"
303+
assert C.D.__qualname__ == "C.D"
304+
290305

291306
@attributes
292307
class GC(object):

0 commit comments

Comments
 (0)