<p><strong><em>显然</em></strong>第一个选项更像python,与OOP保持一致。你知道吗</p>
<pre><code>class Food(object):
def __init__(self, taste = None):
self._taste = taste
class Bread(Food):pass
class Meat(Food):pass
class Soup(Food):pass
</code></pre>
<p>这意味着所有<code>Soup</code>、<code>Meat</code>和<code>Bread</code>对象都是<code>Food</code>,并且具有公共属性。
那么,你需要比较两个物体是否属于同一个食物亚类。只需使用<a href="https://docs.python.org/2/library/functions.html#isinstance" rel="nofollow"><strong>^{<cd5>}</strong></a>内置方法,并检查<code>True</code>。例如</p>
<pre><code>>>> bread = Bread()
>>> soup = Soup()
>>> isinstance(bread, Soup)
False
>>> isinstance(bread, soup.__class__)
False
>>> isinstance(bread, Bread)
True
</code></pre>
<p>如果要使用<code>==</code>运算符比较对象,只需重写<code>__eq__</code>(equals)方法。如下所示</p>
<pre><code>class Food(object):
def __init__(self, taste = None):
self._taste = taste
def __eq__(self, other):
return (isinstance(other, self.__class__)
</code></pre>
<p>然后比较像这样的物体</p>
<pre><code>>>> bread1 = Bread()
>>> bread2 = Bread()
>>> soup = Soup()
>>> bread1 == soup
False
>>> bread1 == bread2 #Are both breads?
True
</code></pre>