Added `qualname` parameter to `dataclasses.make_dataclass` in order to allow user to set `__qualname__` for the generated class.
:func:`!astuple` raises :exc:`TypeError` if *obj* is not a dataclass
instance.
-.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False, module=None, decorator=dataclass)
+.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False, module=None, qualname=None, decorator=dataclass)
Creates a new dataclass with name *cls_name*, fields as defined
in *fields*, base classes as given in *bases*, and initialized
of the dataclass is set to that value.
By default, it is set to the module name of the caller.
+ If *qualname* is defined, the :attr:`~type.__qualname__` attribute of the dataclass
+ is set to that value. By default, it is set to the value passed to *cls_name*.
+
The *decorator* parameter is a callable that will be used to create the dataclass.
It should take the class object as a first argument and the same keyword arguments
as :deco:`dataclass`. By default, the :deco:`dataclass`
.. versionadded:: 3.14
Added the *decorator* parameter.
+ .. versionadded:: next
+ Added the *qualname* parameter.
.. function:: replace(obj, /, **changes)
def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True,
repr=True, eq=True, order=False, unsafe_hash=False,
frozen=False, match_args=True, kw_only=False, slots=False,
- weakref_slot=False, module=None, decorator=dataclass):
+ weakref_slot=False, module=None, qualname=None, decorator=dataclass):
"""Return a new dynamically created dataclass.
The dataclass name will be 'cls_name'. 'fields' is an iterable
If module parameter is defined, the '__module__' attribute of the dataclass is
set to that value.
+
+ If qualname parameter is defined, the '__qualname__' attribute of the dataclass is set
+ to that value.
"""
if namespace is None:
if module is not None:
cls.__module__ = module
+ if qualname:
+ cls.__qualname__ = qualname
+
# Apply the normal provided decorator.
cls = decorator(cls, init=init, repr=repr, eq=eq, order=order,
unsafe_hash=unsafe_hash, frozen=frozen,
self.assertEqual(len(fs), 1)
self.assertEqual(fs[0].name, 'x')
+ def test_makedataclass_with_qualname(self):
+ A = make_dataclass("A", ['a'], qualname='ClassA')
+ self.assertEqual(A.__qualname__, 'ClassA')
+
+ B = make_dataclass("B", ['b'], qualname='module1.ClassB')
+ self.assertEqual(B.__qualname__, 'module1.ClassB')
+
+ C = make_dataclass("C", ['c'])
+ self.assertEqual(C.__qualname__, 'C')
class TestZeroArgumentSuperWithSlots(unittest.TestCase):
def test_zero_argument_super(self):
--- /dev/null
+Update :func:`dataclasses.make_dataclass` to add a *qualname* parameter. The
+*qualname* parameter will be used to set the :attr:`!__qualname__` of the
+created ``dataclass``.