Python.NET(2.1.0)を使用してPython(2.7)の抽象.NET基本クラスから継承しようとしています。私はN00Bが、私は理解し何からPythonのよ...C#で書かれた抽象基本クラスから継承する方法
ここで私が唯一のPythonでやって管理するものだとどれが正常に動作します:
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();
}
}
Pythonの部分からドアを取り外し、代わりに、.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#クラスには同じメタクラスが付いていないようです。代わりに、を明らかに提供していないメタクラスCLR Metatype
が付属しています。
register()
に電話を落とした場合でも、私はエラーメッセージ
sdoor = StringDoor()
TypeError: cannot instantiate abstract class
抽象.NETクラスから継承する方法はありますを受け取るか、この行方不明である
特徴?事前に
おかげで、
ヘニング
@TomHunterがメーリングリストで本来の議論である:このような何かがうまくいくかもしれない場合には好奇心旺盛M」https://mail.python.org/pipermail/pythondotnet/2016-September/001813.html – denfromufa
こんにちは@denfromufa、あなたのようですあなたがPythonとPython.Netを使って.NETの抽象クラスから継承することはできないと言っています。ありがとう –
@TomHunter私はこの機能がpythonnetで実装されたとは思わない。課題トラッカーに機能要求を提出してください。 – denfromufa