擅长:python、mysql、java
<p>您遇到了<a href="http://docs.python.org/3.3/tutorial/classes.html#private-variables" rel="nofollow">name mangling</a>-将双下划线前缀更改为单下划线,您将能够在<code>_items</code>处获得。你知道吗</p>
<p>当您使用<code>__</code>(双下划线)时,Python通过将成员的名称更改为<code>_{classname}{original_name}</code>来为您提供psuedo私有成员,只要它在原始类中被引用。您仍然可以通过显式引用重命名的字段来获取子类中的成员,但这就像在静态类型语言中进行反射一样。。。这意味着所有其他的选择都失败了。你知道吗</p>
<p>您可能希望为抽象方法提供一个实现:</p>
<pre><code># These are methods, not class methods
@abc.abstractmethod
def addItem(self, item):
self.__items.append(item)
@abc.abstractmethod
def getItem (self):
return self.__items.pop()
</code></pre>
<p>然后,在子类中可以调用<code>super().getItem()</code>和<code>super().addItem(item)</code>。。。但在这种情况下,真的不需要ABC。你知道吗</p>