summaryrefslogtreecommitdiffstats
path: root/Lib/dataclasses.py
diff options
context:
space:
mode:
authorIvan Levkivskyi <levkivskyi@gmail.com>2018-03-31 12:41:17 (GMT)
committerGitHub <noreply@github.com>2018-03-31 12:41:17 (GMT)
commit5a7092de1226a95a50f0f384eea8ddb288959249 (patch)
tree807e9531024aea7af14e1efd02d2c8d11979d35c /Lib/dataclasses.py
parent233de021d915364bd3daee921d1d96d50d46d7fe (diff)
downloadcpython-5a7092de1226a95a50f0f384eea8ddb288959249.zip
cpython-5a7092de1226a95a50f0f384eea8ddb288959249.tar.gz
cpython-5a7092de1226a95a50f0f384eea8ddb288959249.tar.bz2
Allow dynamic creation of generic dataclasses (GH-6319)
Diffstat (limited to 'Lib/dataclasses.py')
-rw-r--r--Lib/dataclasses.py4
1 files changed, 3 insertions, 1 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index bd7252c..04e07f8 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -1004,7 +1004,9 @@ def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True,
anns[name] = tp
namespace['__annotations__'] = anns
- cls = type(cls_name, bases, namespace)
+ # We use `types.new_class()` instead of simply `type()` to allow dynamic creation
+ # of generic dataclassses.
+ cls = types.new_class(cls_name, bases, {}, lambda ns: ns.update(namespace))
return dataclass(cls, init=init, repr=repr, eq=eq, order=order,
unsafe_hash=unsafe_hash, frozen=frozen)