-
Notifications
You must be signed in to change notification settings - Fork 772
Closed
Labels
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) == 5The 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.
Reactions are currently unavailable