PyAddAssign

Derive Macro PyAddAssign 

Source
#[derive(PyAddAssign)]
Expand description

Derive macro generating an impl of __iadd__ method by AddAssign trait.

§Expansion

This implements:

#[pymethods]
impl PyClass {
    fn __iadd__(&mut self, other: &Self) {
        AddAssign::add_assign(self, other);
    }
}

§Example

use std::ops::AddAssign;

use pyo3::{prelude::*, py_run};

use pyderive::PyNew;
use pyderive::ops::PyAddAssign;

#[derive(PyNew, PyAddAssign)]
#[pyclass(get_all)]
struct PyClass {
    field: i64
}

impl AddAssign<&Self> for PyClass {
    fn add_assign(&mut self, rhs: &Self) {
        self.field += rhs.field;
    }
}

let test = "
actual = PyClass(1)
actual += PyClass(2)
assert actual.field == 3
";

Python::with_gil(|py| {
    let PyClass = py.get_type::<PyClass>();
    py_run!(py, PyClass, test)
});