<div dir="ltr"><div><span style="color:rgb(31,73,125);font-family:calibri,sans-serif;font-size:14.6667px">Henning,</span><br></div><div><br></div>It is very questionable if "protected" should be available for overriding in Python, since we are not really doing compile time overriding in a .NET class with all sorts of differences in class compilation vs runtime emission.<div><br></div><div>But as a quick workaround you can add protected in this method in pythonnet:</div><div><br></div><div><pre style="font-family:consolas;color:gainsboro;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:rgb(30,30,30)"><span style="color:rgb(86,156,214)">private</span> <span style="color:rgb(86,156,214)">static</span> <span style="color:rgb(86,156,214)">void</span> AddVirtualMethod(<span style="color:rgb(78,201,176)">MethodInfo</span> method, <span style="color:rgb(78,201,176)">Type</span> baseType, <span style="color:rgb(78,201,176)">TypeBuilder</span> typeBuilder)</pre><div class="gmail_extra">Let us know about the result.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Cheers,</div><div class="gmail_extra">Denis</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 27, 2016 at 2:49 AM, Henning Moeller <span dir="ltr"><<a href="mailto:HMoeller@comprion.com" target="_blank">HMoeller@comprion.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="DE">
<div>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Hi Denis,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">thank you again. That helped a lot.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">But – I’m sorry to bother you again. In the classes I really have to use, some of the
</span><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">virtual</span><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> methods are
</span><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">protected</span><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">. Those are
 not resolved by pythonnet. Only </span><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">public virtual</span><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">
 is recognized and overridden by the inherited class. See the (only slightly) altered example:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">namespace</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
 PythonBaseClass<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">{<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">   
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">using</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> System;<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">   
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">class</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175)">Door</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">    {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> Open()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> (!IsOpen())<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">                Toggle();<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        }<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> Close()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> (IsOpen())<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">                Toggle();<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        }<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">bool</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> IsOpen()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175)">Console</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">.WriteLine(</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(163,21,21)">"Door.IsOpen<wbr>()"</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">);<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">return</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">;<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        }<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><b><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(237,125,49)">protected</span></b><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> Toggle()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175)">Console</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">.WriteLine(</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(163,21,21)">"Door.Toggle<wbr>()"</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">);<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span style="font-size:9.5pt;font-family:consolas;color:black">}<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:consolas;color:black">    }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:consolas;color:black">}<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:consolas;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">The Python code has just been altered so that the namespace is properly set. Running the example comes with the following
 output:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">Type "help", "copyright", "credits" or "license" for more information.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">>>> from PythonInheritedClass import *<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">>>> d = StringDoor()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">>>> d.status<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">'closed'<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">>>> d.Open()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">StringDoor.IsOpen()<u></u><u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(237,125,49)">Door.Toggle()<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">>>><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Any ideas? This looks a little bit more “doable” than the
</span><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">abstract</span><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> thing.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">BR,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Henning<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif">From:</span></b><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif"> PythonDotNet [mailto:<a href="mailto:pythondotnet-bounces%2Bhmoeller" target="_blank">pythondotnet-bounces+h<wbr>moeller</a>=<a href="mailto:comprion.com@python.org" target="_blank">comprion.com@python.or<wbr>g</a>]
<b>On Behalf Of </b>Denis Akhiyarov<br>
<b>Sent:</b> Montag, 26. September 2016 20:16<br>
<b>To:</b> A list for users and developers of Python for .NET <<a href="mailto:pythondotnet@python.org" target="_blank">pythondotnet@python.org</a>><br>
<b>Subject:</b> Re: [Python.NET] Inheriting from abstract .NET class<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi Henning,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">This feature was implemented by @tonyroberts in 2013 and is tested in CI with test_subclass.py file.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal">According to these tests, the missing piece in your code is defining explicitly __namespace__ on the .NET class derived in Python:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">In [11]: class StringDoor1(Door):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:     __namespace__ = "PythonBaseClass"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:     def __init__(self):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:         self.status = "closed"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:     def IsOpen(self):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:         print "StringDoor.IsOpen()"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:         return self.status == "open"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:     def Toggle(self):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:         print "StringDoor.Toggle()"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:         if self.status == "open":<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:             self.status = "closed"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:         else:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   ....:             self.status = "open"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">In [12]: d = StringDoor1()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">In [13]: d.status<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Out[13]: 'closed'<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">In [14]: d.Open()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">StringDoor.IsOpen()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">StringDoor.Toggle()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">In [15]: d.status<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Out[15]: 'open'<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Denis<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Mon, Sep 26, 2016 at 9:19 AM, Henning Moeller <<a href="mailto:HMoeller@comprion.com" target="_blank">HMoeller@comprion.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Hi Denis,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Thanks for your fast response. Sounds completely reasonable to me. And this has not been
 too much of an issue for me.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">I got rid of the abstract base class simply by providing an “empty” implementation and
 using a non-abstract base class. No need for meta classes any more. This way, I got rid of error messages. Great!</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Unfortunately, there seem to be an issue when calling a virtual method inside the C# implementation.
 Even when overriding this virtual method in Python, it’s still the base class’ implementation which is called.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">See the new simple base class defined in C#:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">namespace</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> PythonBaseClass</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">{</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">    </span>
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">using</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> System;</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">    </span>
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">class</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175)">Door</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">    {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> Open()</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> (!IsOpen())</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">                Toggle();</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        }</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> Close()</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> (IsOpen())</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">                Toggle();</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        }</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">bool</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> IsOpen()</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175)">Console</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">.WriteLine(</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(163,21,21)">"Door.IsOpen<wbr>()"</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">);</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">return</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">;</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        }</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> Toggle()</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">        {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175)">Console</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">.WriteLine(</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(163,21,21)">"Door.Toggle<wbr>()"</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">);</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black">       
</span><span style="font-size:9.5pt;font-family:consolas;color:black">}</span><u></u><u></u></p>
<p class="MsoNormal">
<span style="font-size:9.5pt;font-family:consolas;color:black">    }</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:consolas;color:black">}</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:consolas;color:black"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">The consuming Python code now looks like this:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">import clr</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">from PythonBaseClass import Door</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">class StringDoor(Door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">    def __init__(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">        self.status = "closed"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">    def IsOpen(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">        print "StringDoor.IsOpen()"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">        return self.status == "open"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">    def Toggle(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">        print "StringDoor.Toggle()"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">        if self.status == "open":</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">            self.status = "closed"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">        else:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">            self.status = "open"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">But the output does not look like expected:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">Type "help", "copyright", "credits" or "license" for more information.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">>>> from PythonInheritedClass import StringDoor</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">>>> d = StringDoor()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">>>> d.status</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">'closed'</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">>>> d.Open()</span><u></u><u></u></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(197,90,17)">Door.IsOpen()</span></b><u></u><u></u></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(197,90,17)">Door.Toggle()</span></b><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">>>> d.status</span><u></u><u></u></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(197,90,17)">'closed'</span></b><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue">>>> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">From my understanding, the output should rather read “</span><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">StringDoor.<something>()</span><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">”
 instead of “</span><span lang="EN-US" style="font-size:11pt;font-family:consolas;color:rgb(31,73,125)">Door.<something>()</span><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">”. Obviously, only the base implementation
 is called but the overridden methods are ignored.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Also a limitation of inheriting C# classes in pythonnet?</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">BR,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)">Henning</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif;color:rgb(31,73,125)"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif">From:</span></b><span lang="EN-US" style="font-size:11pt;font-family:calibri,sans-serif"> PythonDotNet
 [mailto:<a href="mailto:pythondotnet-bounces%2Bhmoeller" target="_blank">pythondotnet-bounces+h<wbr>moeller</a>=<a href="mailto:comprion.com@python.org" target="_blank">comprion.com@python.or<wbr>g</a>]
<b>On Behalf Of </b>Denis Akhiyarov<br>
<b>Sent:</b> Donnerstag, 22. September 2016 19:38<br>
<b>To:</b> A list for users and developers of Python for .NET <<a href="mailto:pythondotnet@python.org" target="_blank">pythondotnet@python.org</a>><br>
<b>Subject:</b> Re: [Python.NET] Inheriting from abstract .NET class</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">You are not a "Python <span style="font-size:11pt;font-family:calibri,sans-serif">n00b</span>" based on metaclass usage!<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">My recommendation is to keep simple integration layer between CPython and .NET, hence metaclasses were/are not supported.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">But contributions are welcome! Although I expect this to be a tremendous undertaking based on reviewing multiple sources.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Note that metaclass is a very different low-level concept from higher-level abstract classes in .NET, hence direct mapping (e.g. `.register()` ) is not feasible.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Denis<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Thu, Sep 22, 2016 at 10:04 AM, Henning Moeller <<a href="mailto:HMoeller@comprion.com" target="_blank">HMoeller@comprion.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="MsoNormal"><span lang="EN-US">Hello out there,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">I’m trying to inherit from an abstract .NET base class in Python (2.7). I’m a Python n00b but from what I understood…</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">Here’s what I managed to do in Python only and which works fine:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">[File: room.py] -------</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">import abc</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">class Room(object):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def __init__(self, door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        self.door = door</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        self.door.open()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def close(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        self.door.close()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        return self.door.is_open()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">class Door(object):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    __metaclass__ = abc.ABCMeta</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">   
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        if not self.is_open():</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">            self.toggle()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def close(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        if self.is_open():</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">            self.toggle()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    @abc.abstractmethod</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        pass</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    @abc.abstractmethod</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def toggle(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        pass</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">   
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">class StringDoor(Door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def __init__(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        self.status = "closed"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        return self.status == "open"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def toggle(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        if self.status == "open":</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">            self.status = "closed"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        else:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">            self.status = "open"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">class BooleanDoor(Door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def __init__(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        self.status = True</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        return self.status</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">    def toggle(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">        self.status = not (self.status)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">Door.register(StringDoor)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:consolas">Door.register(BooleanDoor)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">-------</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">Now, all I did was to replace the abstract base class Door by a C# representation:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">[File: PythonAbstractBaseClass.dll] -------</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">namespace</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> PythonAbstractBaseClass</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">{</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">   
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">abstract</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">class</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:rgb(43,145,175);background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">Door</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">    {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> Open()</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">        {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> (!IsOpen())</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">                Toggle();</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">        }</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">virtual</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">void</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> Close()</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">        {</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">           
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> (IsOpen())</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">                Toggle();</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">        }</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> </span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">public</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">abstract</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">bool</span><span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> IsOpen();</span><u></u><u></u></p>
<p class="MsoNormal">
<span lang="EN-US" style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">       
</span><span style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">public</span><span style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">abstract</span><span style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">
</span><span style="font-size:9.5pt;font-family:consolas;color:blue;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">void</span><span style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white"> Toggle();</span><u></u><u></u></p>
<p class="MsoNormal">
<span style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">    }</span><u></u><u></u></p>
<p class="MsoNormal">
<span style="font-size:9.5pt;font-family:consolas;color:black;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:white">}</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">-------</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">Removing Door from the Python part and importing it from the .NET assembly instead, I end up with this:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">[File: room2.py] -------</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">import clr</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">import abc</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">from PythonAbstractBaseClass import Door</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">class Room(object):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def __init__(self, door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        self.door = door</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        self.door.open()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def close(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        self.door.close()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        return self.door.is_open()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">class StringDoor(Door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def __init__(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        self.status = "closed"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        return self.status == "open"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def toggle(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        if self.status == "open":</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">            self.status = "closed"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        else:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">            self.status = "open"</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">class BooleanDoor(Door):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def __init__(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        self.status = True</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def is_open(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        return self.status</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    def toggle(self):</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">        self.status = not (self.status)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">Door.register(StringDoor)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">Door.register(BooleanDoor)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">-------</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">       
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">But this fails with the following error message:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    Door.register(StringDoor)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">AttributeError: type object 'Door' has no attribute 'register'</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">From what I understood about abc.ABCMeta, this metaclass contributes the ‘register’ method. It seems that abstract C# classes do not come with the same metaclass.
 They instead come with metaclass “CLR Metatype” which obviously does not provide ‘register’.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">But if I drop the call to ‘register’, on instantiating one of the derived classes, I receive the error message</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">    sdoor = StringDoor()</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new"">TypeError: cannot instantiate abstract class</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9pt;font-family:"courier new""> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">Is there a way to inherit from an abstract .NET class or is this is missing feature?</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">Thanks in advance,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="color:rgb(136,136,136)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="color:rgb(136,136,136)">Henning</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="color:rgb(136,136,136)"> </span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><br>
______________________________<wbr>___________________<br>
Python.NET mailing list - <a href="mailto:PythonDotNet@python.org" target="_blank">
PythonDotNet@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/pythondotnet" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/pythondotnet</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"><br>
______________________________<wbr>___________________<br>
Python.NET mailing list - <a href="mailto:PythonDotNet@python.org" target="_blank">PythonDotNet@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/pythondotnet" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/pythondotnet</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>

<br>______________________________<wbr>___________________<br>
Python.NET mailing list - <a href="mailto:PythonDotNet@python.org" target="_blank">PythonDotNet@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/pythondotnet" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/pythondotnet</a><br></blockquote></div><br></div></div></div>