Редактировать: это будет исправлено в новой версии pythonnet (когда этот запрос на объединение объединен).
У меня проблема с Python.NETнаследование.У меня есть DLL, которая состоит из следующего кода:
using System;
namespace InheritanceTest
{
public class BaseClass
{
public bool Transmit()
{
throw new NotImplementedException();
}
}
public class InheritedClass: BaseClass
{
public new bool Transmit()
{
Console.WriteLine("Success!");
return true;
}
}
}
Я ожидаю, что вызов метода Transmit
экземпляра InheritedClass
для записи в консоль и возврата true и Transmit
метод BaseClass
для создания исключения NotImplementedException.
При запуске следующего кода Python:
## setup
import clr
import os
clr.AddReference(os.getcwd() + '\\InheritanceTest.dll')
import InheritanceTest
## method test
base_class = InheritanceTest.BaseClass()
base_class.Transmit() # throws a NotImplementedException as expected
inherited_class = InheritanceTest.InheritedClass()
inherited_class.Transmit() # still throws a NotImplementedException, although it should call InheritedClass.Transmit
Я использую Pythonnet версии 2.3.0 и .NET Framework 4.6.1.Спасибо за вашу помощь!
Редактировать: На этот вопрос нет ответа .Там сказано, что
Новый модификатор инструктирует компилятор использовать реализацию вашего дочернего класса вместо реализации родительского класса.Любой код, который не ссылается на ваш класс, но родительский класс будет использовать реализацию родительского класса.
, что явно не то, что происходит здесь.
Редактировать 2: Кажется, этопроблема с библиотекой pythonnet. Теперь проблема на github.