删除/添加对象到lis

2024-10-04 01:31:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的编码能用吗?程序应该在列表中搜索酒店,如果返回None,我可以在列表中添加一个新的酒店。你知道吗

我特别需要你的帮助。你知道吗

class Hotel:
    def __init__(self, name, address):
        self._name = name
        self._address = address

    @property
    def name(self):
        return self._name

    @property
    def address(self):
        return self._address

    def __str__(self):
        return "Hotel Name: {} Address: {}".format(self._name, self._address)

class TransportServices:
    def __init__(self):
        self._hotels    = [] 
        #self._bookings  = [] # as you can see i have two other list in this class
        #self._drivers   = []

    def searchHotel(self, name):
        for h in self._hotels:
            if h.name == name:
                return h
        return None


    def addHotel(self, hotel):
        h = self.searchHotel(hotel)
        if h is None:
            self._hotels.append(hotel)
            return True
        else:
            return False

    def __str__(self):
        hotels = [str(h) for h in self._hotels]
        return "Hotels\n{} ".format(self._hotels) # need help here

def main():

   hotel = TransportServices()
   hotel.addHotel(Hotel("123", "ABC"))
   hotel.addHotel(Hotel("234", "QWE"))


   print(hotel)

main()

Tags: nameinselfnone列表returnaddressdef
3条回答

问题出在你的退货单上。你知道吗

改变

def __str__(self):
    hotels = [str(h) for h in self._hotels]
    return "Hotels\n{} ".format(self._hotels) # need help here

def __str__(self):
    hotels = [str(h) for h in self._hotels]
    return "Hotels\n{} ".format(hotels)

问题出在你身上

def searchHotel(self, name):
    for h in self._hotels:
        if h.name == name:
            return h
    return None

方法。您正在比较h.namename,但是name不是字符串(就像h.name),而是Hotel对象。你知道吗

试试吧

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.

或者在此处传递字符串,然后在addHotel中执行以下操作:

h = self.searchHotel(hotel.name)

另请注意,如果两件事情在逻辑上应该是相同的,那么定义__eq__可能会很有用。如果任何两个酒店共用一个名称和地址,它们应该是同一个酒店,这样你就可以这样做

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)

这样做的好处是使searchHotel更容易。你知道吗

def searchHotel(self, hotel):
    if hotel in self._hotels:
        return hotel

它认为因为您只是在打印TransportServices对象列表,所以请尝试使用searchHotel函数。你知道吗

print(hotel.searchHotel("234"))

相关问题 更多 >