You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I.e. classes-in-classes are not handled properly in Pythonnet.
Even when applying the workaround mentioned in the #1414 issue there are still problems related to the inheritance.
Namely, I can not call a method declared on the baseclass, on an instance of the nested child class.
The following code demonstrates the issue
namespacepythonnet_testing{publicclassBar{publicstringMethodInBaseClass(){return"hello";}publicclassHej:Bar{}}publicclassFoo{publicBarBar;publicstaticFooCreate(){Foof=new();f.Bar=newBar.Hej();returnf;}}classProgram{staticvoidMain(string[]args){varpyCode=@"import pythonnet_testingf = pythonnet_testing.Foo.Create()print('Trying to access member of nested subclass')_ = pythonnet_testing.Bar # NOTE: The python code crashes unless this explicit reference to the Bar class is usedprint(f'Bar: {f.Bar}')print(f'Method call: {f.Bar.MethodInBaseClass()}') ";PythonEngine.Initialize();using(Py.GIL()){PythonEngine.Exec(pyCode);}}}
Running this gives the following error message
Trying to access member of nested subclass
Bar: pythonnet_testing.Bar+Hej
Unhandled exception. Python.Runtime.PythonException: AttributeError : 'Hej' object has no attribute 'MethodInBaseClass'
[' File "<string>", line 7, in <module>\n'] at Python.Runtime.PythonException.ThrowIfIsNull(BorrowedReference reference)
at Python.Runtime.PythonEngine.RunString(String code, Nullable`1 globals, Nullable`1 locals, RunFlagType flag)
In order to call the MethodInBaseClass method on the child class, I must explicitly re-define it like this:
Environment
Pythonnet version: 2.5.1
Python version: Python 3.9.2
Operating System: MacOS
.NET Runtime: 5.0.200
Details
Related to the problem reported in #1414
I.e. classes-in-classes are not handled properly in Pythonnet.
Even when applying the workaround mentioned in the #1414 issue there are still problems related to the inheritance.
Namely, I can not call a method declared on the baseclass, on an instance of the nested child class.
The following code demonstrates the issue
Running this gives the following error message
In order to call the
MethodInBaseClass
method on the child class, I must explicitly re-define it like this:The text was updated successfully, but these errors were encountered: