# -*- coding: utf-8 -*- """Demonstrate broken descriptor `__set_name__` feature for `dataclass` descriptor fields.""" class D: """A descriptor class that knows its name.""" def __set_name__(self, owner, name): self.name = name def __get__(self, instance, owner): if instance is not None: return 1 return self if __name__ == "__main__": from dataclasses import dataclass, field @dataclass class C: d: int = field(default=D(), init=False) print(f"Instance attribute access works as expected: C().d -> {C().d}") print(f"Class object attribute access works as expected: C.d -> {C.d}") print("However, the descriptor (`D`) object name was never set; C.d.name raises `AttributeError`:") C.d.name