Изменение: это будет исправлено в новой версии 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.