Attribute Macro pyclass
#[pyclass]Available on crate feature 
macros only.Expand description
A proc macro used to expose Rust structs and fieldless enums as Python objects.
#[pyclass] can be used with the following parameters:
| Parameter | Description | 
|---|---|
| constructor | This is currently only allowed on variants of complex enums. It allows customization of the generated class constructor for each variant. It uses the same syntax and supports the same options as the signatureattribute of functions and methods. | 
| crate = "some::path" | Path to import the pyo3crate, if it’s not accessible at::pyo3. | 
| dict | Gives instances of this class an empty __dict__to store custom attributes. | 
| eq | Implements __eq__using thePartialEqimplementation of the underlying Rust datatype. | 
| eq_int | Implements __eq__using__int__for simple enums. | 
| extends = BaseType | Use a custom baseclass. Defaults to PyAny | 
| freelist = N | Implements a free list of size N. This can improve performance for types that are often created and deleted in quick succession. Profile your code to see whether freelistis right for you. | 
| frozen | Declares that your pyclass is immutable. It removes the borrow checker overhead when retrieving a shared reference to the Rust struct, but disables the ability to get a mutable reference. | 
| get_all | Generates getters for all fields of the pyclass. | 
| hash | Implements __hash__using theHashimplementation of the underlying Rust datatype. | 
| mapping | Inform PyO3 that this class is a Mapping, and so leave its implementation of sequence C-API slots empty. | 
| module = "module_name" | Python code will see the class as being defined in this module. Defaults to builtins. | 
| name = "python_name" | Sets the name that Python sees this class as. Defaults to the name of the Rust struct. | 
| ord | Implements __lt__,__gt__,__le__, &__ge__using thePartialOrdimplementation of the underlying Rust datatype. Requireseq | 
| rename_all = "renaming_rule" | Applies renaming rules to every getters and setters of a struct, or every variants of an enum. Possible values are: “camelCase”, “kebab-case”, “lowercase”, “PascalCase”, “SCREAMING-KEBAB-CASE”, “SCREAMING_SNAKE_CASE”, “snake_case”, “UPPERCASE”. | 
| sequence | Inform PyO3 that this class is a Sequence, and so leave its C-API mapping length slot empty. | 
| set_all | Generates setters for all fields of the pyclass. | 
| str | Implements __str__using theDisplayimplementation of the underlying Rust datatype or by passing an optional format stringstr="<format string>". Note: The optional format string is only allowed for structs.nameandrename_allare incompatible with the optional format string.  Additional details can be found in the discussion on this PR. | 
| subclass | Allows other Python classes and #[pyclass]to inherit from this class. Enums cannot be subclassed. | 
| unsendable | Required if your struct is not Send. Rather than usingunsendable, consider implementing your struct in a thread-safe way by e.g. substitutingRcwithArc. By usingunsendable, your class will panic when accessed by another thread. Also note the Python’s GC is multi-threaded and while unsendable classes will not be traversed on foreign threads to avoid UB, this can lead to memory leaks. | 
| weakref | Allows this class to be weakly referenceable. | 
All of these parameters can either be passed directly on the #[pyclass(...)] annotation, or as one or
more accompanying #[pyo3(...)] annotations, e.g.:
ⓘ
// Argument supplied directly to the `#[pyclass]` annotation.
#[pyclass(name = "SomeName", subclass)]
struct MyClass {}
// Argument supplied as a separate annotation.
#[pyclass]
#[pyo3(name = "SomeName", subclass)]
struct MyClass {}For more on creating Python classes, see the class section of the guide.