pub trait Callable: PyPayload {
type Args: FromArgs;
// Required method
fn call(zelf: &Py<Self>, args: Self::Args, vm: &VirtualMachine) -> PyResult;
// Provided methods
fn slot_call(
zelf: &PyObject,
args: FuncArgs,
vm: &VirtualMachine
) -> PyResult { ... }
fn __call__(
zelf: PyObjectRef,
args: FuncArgs,
vm: &VirtualMachine
) -> PyResult { ... }
fn __extend_method_def(method_defs: &mut Vec<PyMethodDef>) { ... }
fn __extend_py_class(ctx: &Context, class: &'static Py<PyType>) { ... }
fn __extend_slots(slots: &mut PyTypeSlots) { ... }
}