Open
Description
This issue is about sub classing with overridden init ; This bug prevents it. Details below.
🐛 Bug Reports
When reporting a bug, please provide the following information. If this is not a bug report you can just discard this template.
🌍 Environment
- Your operating system and version: linux, ubuntu focal (20.04)
- Your python version: 3.8
- How did you install python (e.g. apt or pyenv)? Did you use a virtualenv? ubuntu package (apt-get). using a virtualenv for testing.
- Your Rust version (
rustc --version
): rustc 1.54.0-nightly (b663c0f4f 2021-05-29) - Your PyO3 version: master 8bf3ade (v0.8.0-1694-g8bf3adee3) (Merge pull request Simplify code generated for for_each_method_def and for_each_proto_slot #1641 from 1tgr/for-each)
- Have you tried using latest PyO3 main (replace
version = "0.x.y"
withgit = "https://github.com/PyO3/pyo3")?
yes.
💥 Reproducing
I have a branch with the augmented test (examples/pyo3-pytests/src/subclassing.rs & examples/pyo3-pytests/tests/test_subclassing.py), at https://github.com/alonblade/pyo3/tree/add-test-for-inheritance-with-init ; Here is the change:
#[pyclass(subclass)]
pub struct SubclassableWithParameter {}
#[pymethods]
impl SubclassableWithParameter {
#[new]
fn new(foo: bool) -> Self {
SubclassableWithParameter {}
}
}
class SubclassWithExtraInitArguments(SubclassableWithParameter):
def __init__(self, bar):
print("before super init")
super().__init__(foo=bar * 2)
def test_subclass_with_init():
s = SubclassWithExtraInitArguments(10)
And the output
tests/test_subclassing.py .F [100%]
===================================================================================================== FAILURES ======================================================================================================
______________________________________________________________________________________________ test_subclass_with_init ______________________________________________________________________________________________
def test_subclass_with_init():
> s = SubclassWithExtraInitArguments(10)
E TypeError: argument 'foo': 'int' object cannot be converted to 'PyBool'
tests/test_subclassing.py:27: TypeError