- Notifications
You must be signed in to change notification settings - Fork749
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:
publicabstractclassGenericVirtualMethodTest{publicvirtualQVirtMethod<Q>(Qarg1){returnarg1;}}
Then inherit from it as in this test:
deftest_virtual_generic_method():classOverloadingSubclass(GenericVirtualMethodTest):__namespace__="test_virtual_generic_method_cls"obj=OverloadingSubclass()assertobj.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.