diff --git a/python/cells.cpp b/python/cells.cpp
index 9d745cde1246973bf318f1bf885d6a58584a0007..0d4e6a44de15f19f0e199b134bbe3d9a4a17b19d 100644
--- a/python/cells.cpp
+++ b/python/cells.cpp
@@ -267,7 +267,8 @@ void register_cells(pybind11::module& m) {
     pybind11::class_<arb::cv_policy> cv_policy(m, "cv_policy",
             "Describes the rules used to discretize (compartmentalise) a cable cell morphology.");
     cv_policy
-        .def(pybind11::init([](const std::string& s) { return arborio::parse_cv_policy_expression(s).unwrap(); }))
+        .def(pybind11::init([](const std::string& expression) { return arborio::parse_cv_policy_expression(expression).unwrap(); }),
+            "expression"_a, "A valid CV policy expression")
         .def_property_readonly("domain",
                                [](const arb::cv_policy& p) {return util::pprintf("{}", p.domain());},
                                "The domain on which the policy is applied.")
@@ -369,9 +370,8 @@ void register_cells(pybind11::module& m) {
             "A spike detector, generates a spike when voltage crosses a threshold. Can be used as source endpoint for an arbor.connection.");
     detector
         .def(pybind11::init(
-            [](double thresh) {
-                return arb::threshold_detector{thresh};
-            }), "threshold"_a)
+            [](double thresh) { return arb::threshold_detector{thresh}; }),
+            "threshold"_a, "Voltage threshold of spike detector [mV]")
         .def_readonly("threshold", &arb::threshold_detector::threshold, "Voltage threshold of spike detector [mV]")
         .def("__repr__", [](const arb::threshold_detector& d){
             return util::pprintf("<arbor.threshold_detector: threshold {} mV>", d.threshold);})
@@ -594,13 +594,15 @@ void register_cells(pybind11::module& m) {
         .def(pybind11::init(
             [](const arb::morphology& m, const label_dict_proxy& labels, const arb::decor& d) {
                 return arb::cable_cell(m, labels.dict, d);
-            }), "morphology"_a, "labels"_a, "decor"_a)
+            }),
+            "morphology"_a, "labels"_a, "decor"_a,
+            "Construct with a morphology, label dictionary and decor.")
         .def(pybind11::init(
             [](const arb::segment_tree& t, const label_dict_proxy& labels, const arb::decor& d) {
                 return arb::cable_cell(arb::morphology(t), labels.dict, d);
             }),
             "segment_tree"_a, "labels"_a, "decor"_a,
-            "Construct with a morphology derived from a segment tree.")
+            "Construct with a morphology derived from a segment tree, label dictionary and decor.")
         .def_property_readonly("num_branches",
             [](const arb::cable_cell& c) {return c.morphology().num_branches();},
             "The number of unbranched cable sections in the morphology.")
diff --git a/python/mechanism.cpp b/python/mechanism.cpp
index 0d74a21fdb00fec184e5b624662d4c14ebbe1f4d..5519a9189f55d578a4d74a3226208747c2a119c9 100644
--- a/python/mechanism.cpp
+++ b/python/mechanism.cpp
@@ -204,7 +204,9 @@ void register_mechanisms(pybind11::module& m) {
 
     pybind11::class_<arb::mechanism_desc> mechanism_desc(m, "mechanism");
     mechanism_desc
-        .def(pybind11::init([](const char* n) {return arb::mechanism_desc{n};}))
+        .def(pybind11::init([](const char* name) {return arb::mechanism_desc{name};}),
+            "name"_a, "The name of the mechanism"
+        )
         // allow construction of a description with parameters provided in a dictionary:
         //      mech = arbor.mechanism('mech_name', {'param1': 1.2, 'param2': 3.14})
         .def(pybind11::init(
diff --git a/python/mpi.cpp b/python/mpi.cpp
index 57ea410bdb92e02871fcf4c89d1c78f00fa1ea60..d3de709f86c1116d7fb41300be4a744b625f75e0 100644
--- a/python/mpi.cpp
+++ b/python/mpi.cpp
@@ -97,11 +97,14 @@ std::ostream& operator<<(std::ostream& o, const mpi_comm_shim& c) {
 
 void register_mpi(pybind11::module& m) {
     using namespace std::string_literals;
+    using namespace pybind11::literals;
 
     pybind11::class_<mpi_comm_shim> mpi_comm(m, "mpi_comm");
     mpi_comm
         .def(pybind11::init<>())
-        .def(pybind11::init([](pybind11::object o){return mpi_comm_shim(o);}))
+        .def(pybind11::init(
+            [](pybind11::object o){ return mpi_comm_shim(o); }),
+            "mpi_comm_obj"_a, "MPI communicator object.")
         .def("__str__",  util::to_string<mpi_comm_shim>)
         .def("__repr__", util::to_string<mpi_comm_shim>);