Skip to main content

Constructor

Trait Constructor 

Source
pub trait Constructor: PyPayload + Debug {
    type Args: FromArgs;

    const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _;

    // Required method
    fn py_new(
        cls: &Py<PyType>,
        args: Self::Args,
        vm: &VirtualMachine,
    ) -> PyResult<Self>;

    // Provided methods
    fn slot_new(cls: PyTypeRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult { ... }
    fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>) { ... }
    fn __extend_slots(slots: &mut PyTypeSlots) { ... }
}
Expand description

Trait for types that can be constructed via Python’s __new__ method.

slot_new corresponds to the __new__ type slot.

In most cases, __new__ simply initializes the payload and assigns a type, so you only need to override py_new. The default slot_new implementation will call py_new and then wrap the result with into_ref_with_type.

However, if a subtype requires more than just payload initialization (e.g., returning an existing object for optimization, setting attributes after creation, or special handling of the class type), you should override slot_new directly instead of py_new.

§When to use py_new only (most common case):

  • Simple payload initialization that just creates Self
  • The type doesn’t need special handling for subtypes

§When to override slot_new:

  • Returning existing objects (e.g., PyInt, PyStr, PyBool for optimization)
  • Setting attributes or dict entries after object creation
  • Special class type handling (e.g., PyType and its metaclasses)
  • Post-creation mutations that require PyRef

Provided Associated Constants§

Source

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Required Associated Types§

Required Methods§

Source

fn py_new( cls: &Py<PyType>, args: Self::Args, vm: &VirtualMachine, ) -> PyResult<Self>

Creates the payload for this type. In most cases, just implement this method and let the default slot_new handle wrapping with the correct type.

Provided Methods§

Source

fn slot_new(cls: PyTypeRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult

The type slot for __new__. Override this only when you need special behavior beyond simple payload creation.

Source

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source

fn __extend_slots(slots: &mut PyTypeSlots)

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl Constructor for PyArithmeticError

Source§

impl Constructor for PyAssertionError

Source§

impl Constructor for PyAttributeError

Source§

impl Constructor for PyBaseException

Source§

impl Constructor for PyBaseExceptionGroup

Source§

impl Constructor for PyBaseObject

Source§

impl Constructor for PyBlockingIOError

Source§

impl Constructor for PyBool

Source§

impl Constructor for PyBoundMethod

Source§

type Args = PyBoundMethodNewArgs

Source§

impl Constructor for PyBrokenPipeError

Source§

impl Constructor for PyBufferError

Source§

impl Constructor for PyBytes

Source§

impl Constructor for PyBytesWarning

Source§

impl Constructor for PyChildProcessError

Source§

impl Constructor for PyClassMethod

Source§

impl Constructor for PyCode

Source§

type Args = PyCodeNewArgs

Source§

impl Constructor for PyComplex

Source§

type Args = ComplexArgs

Source§

impl Constructor for PyConnectionAbortedError

Source§

impl Constructor for PyConnectionError

Source§

impl Constructor for PyConnectionRefusedError

Source§

impl Constructor for PyConnectionResetError

Source§

impl Constructor for PyDeprecationWarning

Source§

impl Constructor for PyEOFError

Source§

impl Constructor for PyEllipsis

Source§

impl Constructor for PyEncodingWarning

Source§

impl Constructor for PyEnumerate

Source§

type Args = EnumerateArgs

Source§

impl Constructor for PyException

Source§

impl Constructor for PyFileExistsError

Source§

impl Constructor for PyFileNotFoundError

Source§

impl Constructor for PyFilter

Source§

impl Constructor for PyFloat

Source§

impl Constructor for PyFloatingPointError

Source§

impl Constructor for PyFrozenSet

Source§

impl Constructor for PyFunction

Source§

type Args = PyFunctionNewArgs

Source§

impl Constructor for PyFutureWarning

Source§

impl Constructor for PyGeneratorExit

Source§

impl Constructor for PyGenericAlias

Source§

impl Constructor for PyImportError

Source§

impl Constructor for PyImportWarning

Source§

impl Constructor for PyIncompleteInputError

Source§

impl Constructor for PyIndentationError

Source§

impl Constructor for PyIndexError

Source§

impl Constructor for PyInt

Source§

impl Constructor for PyInterpolation

Source§

type Args = InterpolationArgs

Source§

impl Constructor for PyInterruptedError

Source§

impl Constructor for PyIsADirectoryError

Source§

impl Constructor for PyKeyError

Source§

impl Constructor for PyKeyboardInterrupt

Source§

impl Constructor for PyList

Source§

impl Constructor for PyLookupError

Source§

impl Constructor for PyMap

Source§

type Args = (PyObjectRef, PosArgs<PyIter>, PyMapNewArgs)

Source§

impl Constructor for PyMappingProxy

Source§

impl Constructor for PyMemoryError

Source§

impl Constructor for PyMemoryView

Source§

type Args = PyMemoryViewNewArgs

Source§

impl Constructor for PyModuleNotFoundError

Source§

impl Constructor for PyNameError

Source§

impl Constructor for PyNone

Source§

impl Constructor for PyNotADirectoryError

Source§

impl Constructor for PyNotImplemented

Source§

impl Constructor for PyNotImplementedError

Source§

impl Constructor for PyOSError

Source§

impl Constructor for PyOverflowError

Source§

impl Constructor for PyPendingDeprecationWarning

Source§

impl Constructor for PyPermissionError

Source§

impl Constructor for PyProcessLookupError

Source§

impl Constructor for PyProperty

Source§

impl Constructor for PyPythonFinalizationError

Source§

impl Constructor for PyRecursionError

Source§

impl Constructor for PyReferenceError

Source§

impl Constructor for PyResourceWarning

Source§

impl Constructor for PyRuntimeError

Source§

impl Constructor for PyRuntimeWarning

Source§

impl Constructor for PyStaticMethod

Source§

impl Constructor for PyStopAsyncIteration

Source§

impl Constructor for PyStopIteration

Source§

impl Constructor for PyStr

Source§

type Args = StrArgs

Source§

impl Constructor for PySuper

Source§

impl Constructor for PySyntaxError

Source§

impl Constructor for PySyntaxWarning

Source§

impl Constructor for PySystemError

Source§

impl Constructor for PySystemExit

Source§

impl Constructor for PyTabError

Source§

impl Constructor for PyTemplate

Source§

impl Constructor for PyTimeoutError

Source§

impl Constructor for PyTraceback

Source§

impl Constructor for PyTuple

Source§

impl Constructor for PyType

Source§

impl Constructor for PyTypeError

Source§

impl Constructor for PyUnboundLocalError

Source§

impl Constructor for PyUnicodeDecodeError

Source§

impl Constructor for PyUnicodeEncodeError

Source§

impl Constructor for PyUnicodeError

Source§

impl Constructor for PyUnicodeTranslateError

Source§

impl Constructor for PyUnicodeWarning

Source§

impl Constructor for PyUserWarning

Source§

impl Constructor for PyValueError

Source§

impl Constructor for PyWarning

Source§

impl Constructor for PyWeak

Source§

type Args = WeakNewArgs

Source§

impl Constructor for PyWeakProxy

Source§

type Args = WeakProxyNewArgs

Source§

impl Constructor for PyZeroDivisionError

Source§

impl Constructor for PyZip

Source§

type Args = (PosArgs<PyIter>, PyZipNewArgs)

Source§

impl Constructor for NoDefault

Source§

impl Constructor for ParamSpec

Source§

impl Constructor for ParamSpecArgs

Source§

impl Constructor for ParamSpecKwargs

Source§

impl Constructor for TypeVar

Source§

impl Constructor for TypeVarTuple

Source§

impl<T> Constructor for T