diff --git a/python_binding/backend/pybind_OperatorImpl.cpp b/python_binding/backend/pybind_OperatorImpl.cpp
index 8eb9e2649b19374e4346be18f9a3ab8070e4dc3c..34610069079ee792ebbe4b261b57177b3bbe2997 100644
--- a/python_binding/backend/pybind_OperatorImpl.cpp
+++ b/python_binding/backend/pybind_OperatorImpl.cpp
@@ -12,6 +12,7 @@
 #include <pybind11/pybind11.h>
 #include <pybind11/stl.h>
 
+#include "aidge/operator/Operator.hpp"
 #include "aidge/backend/OperatorImpl.hpp"
 
 namespace py = pybind11;
@@ -22,8 +23,8 @@ namespace Aidge {
  *
  */
 class pyOperatorImpl: public OperatorImpl {
-    public:
-    pyOperatorImpl(){}
+public:
+    using OperatorImpl::OperatorImpl; // Inherit constructors
 
     void forward() override {
         PYBIND11_OVERRIDE(
@@ -42,7 +43,7 @@ class pyOperatorImpl: public OperatorImpl {
         );
     }
     NbElts_t getNbRequiredData(const IOIndex_t inputIdx) const override {
-        PYBIND11_OVERRIDE_PURE_NAME(
+        PYBIND11_OVERRIDE_NAME(
             NbElts_t,
             OperatorImpl,
             "get_nb_required_data",
@@ -51,7 +52,7 @@ class pyOperatorImpl: public OperatorImpl {
         );
     }
     NbElts_t getNbRequiredProtected(const IOIndex_t inputIdx) const override {
-        PYBIND11_OVERRIDE_PURE_NAME(
+        PYBIND11_OVERRIDE_NAME(
             NbElts_t,
             OperatorImpl,
             "get_nb_required_protected",
@@ -62,7 +63,7 @@ class pyOperatorImpl: public OperatorImpl {
     }
     NbElts_t getRequiredMemory(const IOIndex_t outputIdx,
     const std::vector<DimSize_t> &inputsSize) const override {
-        PYBIND11_OVERRIDE_PURE_NAME(
+        PYBIND11_OVERRIDE_NAME(
             NbElts_t,
             OperatorImpl,
             "get_required_memory",
@@ -73,7 +74,7 @@ class pyOperatorImpl: public OperatorImpl {
         );
     }
     NbElts_t getNbConsumedData(const IOIndex_t inputIdx) const override {
-        PYBIND11_OVERRIDE_PURE_NAME(
+        PYBIND11_OVERRIDE_NAME(
             NbElts_t,
             OperatorImpl,
             "get_nb_consumed_data",
@@ -83,7 +84,7 @@ class pyOperatorImpl: public OperatorImpl {
         );
     }
     NbElts_t getNbProducedData(const IOIndex_t outputIdx) const override {
-        PYBIND11_OVERRIDE_PURE_NAME(
+        PYBIND11_OVERRIDE_NAME(
             NbElts_t,
             OperatorImpl,
             "get_nb_produced_data",
@@ -93,7 +94,7 @@ class pyOperatorImpl: public OperatorImpl {
         );
     }
     void updateConsummerProducer() override {
-        PYBIND11_OVERRIDE_PURE_NAME(
+        PYBIND11_OVERRIDE_NAME(
             void,
             OperatorImpl,
             "update_consummer_producer",
@@ -106,7 +107,7 @@ class pyOperatorImpl: public OperatorImpl {
 void init_OperatorImpl(py::module& m){
 
     py::class_<OperatorImpl, std::shared_ptr<OperatorImpl>, pyOperatorImpl>(m, "OperatorImpl", py::dynamic_attr())
-    .def(py::init<>())
+    .def(py::init<const Operator&>())
     .def("forward", &OperatorImpl::forward)
     .def("backward", &OperatorImpl::backward)
     .def("get_nb_required_data", &OperatorImpl::getNbRequiredData)