擅长:python、mysql、java
<p>问题出在你身上</p>
<pre><code>def searchHotel(self, name):
for h in self._hotels:
if h.name == name:
return h
return None
</code></pre>
<p>方法。您正在比较<code>h.name</code>和<code>name</code>,但是<code>name</code>不是字符串(就像<code>h.name</code>),而是<code>Hotel</code>对象。你知道吗</p>
<p>试试吧</p>
<pre><code>def searchHotel(self, hotel):
for h in self._hotels:
if h.name == hotel.name:
return h
# return None is not necessary here, it's the default.
</code></pre>
<p>或者在此处传递字符串,然后在<code>addHotel</code>中执行以下操作:</p>
<pre><code>h = self.searchHotel(hotel.name)
</code></pre>
<hr/>
<p>另请注意,如果两件事情在逻辑上应该是相同的,那么定义<code>__eq__</code>可能会很有用。如果任何两个酒店共用一个名称和地址,它们应该是同一个酒店,这样你就可以这样做</p>
<pre><code>class Hotel:
def __eq__(self, other: 'Hotel') -> bool:
if not isinstance(other, self.__class__):
return False
return (self.name, self.address) == (other.name, other.address)
</code></pre>
<p>这样做的好处是使<code>searchHotel</code>更容易。你知道吗</p>
<pre><code>def searchHotel(self, hotel):
if hotel in self._hotels:
return hotel
</code></pre>