diff --git a/pyo3_bindgen_engine/src/bindgen/function.rs b/pyo3_bindgen_engine/src/bindgen/function.rs index 7bd310a..3c8218c 100644 --- a/pyo3_bindgen_engine/src/bindgen/function.rs +++ b/pyo3_bindgen_engine/src/bindgen/function.rs @@ -162,8 +162,6 @@ pub fn bind_function( .into_rs_borrowed(module_name, all_types) }) .collect_vec(); - let return_annotation = - Type::try_from(return_annotation.unwrap_or(pynone))?.into_rs_owned(module_name, all_types); let mut doc = function.getattr("__doc__")?.to_string(); if doc == "None" { @@ -228,6 +226,14 @@ pub fn bind_function( let is_init_fn = function_name == "__init__"; + let return_annotation = if is_init_fn && method_of_class.is_some() { + quote::quote! { + &'py Self + } + } else { + Type::try_from(return_annotation.unwrap_or(pynone))?.into_rs_owned(module_name, all_types) + }; + let call_method = match (is_init_fn, has_positional_args, has_kwargs) { (true, _, true) => { quote::quote! {