diff --git a/aidge_core/unit_tests/test_operator_binding.py b/aidge_core/unit_tests/test_operator_binding.py
index 384a82de8d821e45c1be7e61d451ceff0a2bf3c9..8d6f2686d9010ac4ebed80cd04f74effe763e977 100644
--- a/aidge_core/unit_tests/test_operator_binding.py
+++ b/aidge_core/unit_tests/test_operator_binding.py
@@ -100,6 +100,23 @@ class test_operator_binding(unittest.TestCase):
         attrs.d = 23.89
         self.assertEqual(aidge_core.test_DynamicAttributes_binding_check(attrs), 23.89)
 
+        op = aidge_core.GenericOperatorOp("any_type", 1,0,1)
+        with self.assertRaises(RuntimeError):
+            op.attr.something
+
+        op.attr.something = aidge_core.DynamicAttributes()
+        try:
+            self.assertEqual(str(op.attr), "AttrDict({'something': AttrDict({})})")
+        except Exception:
+            self.fail("op.attr.something raised Exception unexpectedly!")
+
+        op.attr.something.arg1 = 4
+        self.assertEqual(op.attr.something.arg1, 4)
+
+        # auto create the namespace another_thing (not enabled)
+        #op.attr.another_thing.arg = 44
+        #self.assertEqual(op.attr.another_thing.arg, 44)
+
     def test_forward_dims(self):
         in_dims=[25, 25]
         input = aidge_core.Producer(in_dims, name="In")
diff --git a/python_binding/utils/pybind_Attributes.cpp b/python_binding/utils/pybind_Attributes.cpp
index 135ebb48e9e6f1f1b7a7adca17efb3e95dc055e5..bc0ccb3f4053e37c186acd919fcadae9d5d19a40 100644
--- a/python_binding/utils/pybind_Attributes.cpp
+++ b/python_binding/utils/pybind_Attributes.cpp
@@ -47,6 +47,7 @@ void init_Attributes(py::module& m){
 
 
     py::class_<DynamicAttributes, std::shared_ptr<DynamicAttributes>, Attributes>(m, "DynamicAttributes")
+    .def(py::init<>())
     .def("add_attr", &DynamicAttributes::addAttrPy, py::arg("name"), py::arg("value"))
     .def("del_attr", &DynamicAttributes::delAttr, py::arg("name"));