Closed
Description
Environment
- Pythonnet version: 3.0.0-preview2022-04-11
- Python version: 3.10
- Operating System: MacOS and Ubuntu 2021.4
- .NET Runtime: .net 6
Details
If I create a python class which inherits from a C# class that has a virtual generic method and exception is thrown while the class is being defined. Note, not during object instanciation time.
To reproduce, take the following C# class:
public abstract class GenericVirtualMethodTest
{
public virtual Q VirtMethod<Q>(Q arg1)
{
return arg1;
}
}
Then inherit from it as in this test:
def test_virtual_generic_method():
class OverloadingSubclass(GenericVirtualMethodTest):
__namespace__ = "test_virtual_generic_method_cls"
obj = OverloadingSubclass()
assert obj.VirtMethod[int](5) == 5
The result is the following exception (Actually a C# exception inside a python exception inside a C# exception):
Python.Runtime.PythonException : An attempt was made to load a program with an incorrect format.
(0x8007000B)
File "/Users/bruger/code/work/pythonnet/src/../tests/test_subclass.py", line 268, in test_virtual_generic_method
class OverloadingSubclass(GenericVirtualMethodTest):
File "<string>", line 19, in <module>
at Python.Runtime.PythonException.ThrowLastAsClrException() in /Users/bruger/code/work/pythonnet/src/runtime/PythonException.cs:line 53
at Python.Runtime.PythonException.ThrowIfIsNull(NewReference& ob) in /Users/bruger/code/work/pythonnet/src/runtime/PythonException.cs:line 455
at Python.Runtime.PythonEngine.RunString(String code, BorrowedReference globals, BorrowedReference locals, RunFlagType flag) in /Users/bruger/code/work/pythonnet/src/runtime/PythonEngine.cs:line 625
at Python.Runtime.PythonEngine.Exec(String code, PyDict globals, PyObject locals) in /Users/bruger/code/work/pythonnet/src/runtime/PythonEngine.cs:line 530
at Python.PythonTestsRunner.PythonTestRunner.RunPythonTest(String testFile, String testName) in /Users/bruger/code/work/pythonnet/src/python_tests_runner/PythonTestRunner.cs:line 64
-----
One or more child tests had errors
Exception doesn't have a stacktrace
Proposed Fix
I understand that it is probably a bit complicated to actually override a virtual generic method in python code and maybe it is not even necesary. So maybe the best solution is to just ignore virtual methods in this case.