Изменить: это будет исправлено в новой версии 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. Спасибо за вашу помощь!
Изменить: на этот вопрос не отвечает этот вопрос. Там сказано, что
Модификатор new указывает компилятору использовать реализацию вашего дочернего класса вместо реализации родительского класса. Любой код, который не ссылается на ваш класс, но на родительский класс, будет использовать реализацию родительского класса.
что явно не то, что здесь происходит.
Редактировать 2: похоже, это проблема с библиотекой pythonnet. Ошибка теперь находится на github.