Python.NET (2.1.0)을 사용하여 Python (2.7)에서 추상 .NET 기본 클래스를 상속하려고합니다. 내가 여기 C#으로 작성된 추상 기본 클래스에서 상속하는 방법
가 난 단지 파이썬에서 어떻게 관리하고 잘 작동하는 무슨 ... 난 이해 것과 파이썬 n00b하지만 해요 :import abc
class Door(object):
__metaclass__ = abc.ABCMeta
def open(self):
if not self.is_open():
self.toggle()
def close(self):
if self.is_open():
self.toggle()
@abc.abstractmethod
def is_open(self):
pass
@abc.abstractmethod
def toggle(self):
pass
class StringDoor(Door):
def __init__(self):
self.status = "closed"
def is_open(self):
return self.status == "open"
def toggle(self):
if self.status == "open":
self.status = "closed"
else:
self.status = "open"
class BooleanDoor(Door):
def __init__(self):
self.status = True
def is_open(self):
return self.status
def toggle(self):
self.status = not (self.status)
Door.register(StringDoor)
Door.register(BooleanDoor)
를 자, 내가 한 모두는 추상 기본 클래스의 문을 대체하는 것이었다 C#을 표현 기준 :
namespace PythonAbstractBaseClass
{
public abstract class Door
{
public virtual void Open()
{
if (!IsOpen())
Toggle();
}
public virtual void Close()
{
if (IsOpen())
Toggle();
}
public abstract bool IsOpen();
public abstract void Toggle();
}
}
파이썬 부분에서 문을 제거하고 대신 .NET 어셈블리에서 가져 오기, 나는이와 끝까지 :
import clr
import abc
from PythonAbstractBaseClass import Door
class StringDoor(Door):
def __init__(self):
self.status = "closed"
def is_open(self):
return self.status == "open"
def toggle(self):
if self.status == "open":
self.status = "closed"
else:
self.status = "open"
class BooleanDoor(Door):
def __init__(self):
self.status = True
def is_open(self):
return self.status
def toggle(self):
self.status = not (self.status)
Door.register(StringDoor)
Door.register(BooleanDoor)
는 그러나 이것은 다음과 같은 오류 메시지와 함께 실패합니다
내가 이해 한 것과Door.register(StringDoor)
AttributeError: type object 'Door' has no attribute 'register'
약 abc.ABCMeta
,이 메타 클래스는 register()
방법을 기여하고있다. 추상 C# 클래스는 동일한 메타 클래스가없는 것으로 보입니다. 그들은 대신에 register()
을 제공하지 않는 메타 클래스 CLR Metatype
을 제공합니다.
register()
에 전화를 떨어 뜨리면, 나는 오류 메시지
sdoor = StringDoor()
TypeError: cannot instantiate abstract class
추상 .NET 클래스에서 상속 할 수있는 방법이 있나요를 수신하거나이 누락 된 것입니다
특색? 사전에
감사합니다,
헤닝
@TomHunter 메일 링리스트에있는 원래의 설명이다 : 이런 식으로 뭔가가 작동 할 경우 호기심 'https://mail.python.org/pipermail/pythondotnet/2016-September/001813.html – denfromufa
안녕하세요 @denfromufa, 당신처럼 보인다 ar 당신이 Python과 Python.Net을 사용하는 .NET 추상 클래스로부터 상속받을 수 없다는 것을 말하라. 감사합니다 –
@ TomHunter 나는이 기능이 pythonnet에서 구현되었다고 생각하지 않습니다. 이슈 트래커에서 기능 요청을 제출하십시오. – denfromufa