我想组织我玩的游戏中的汽车数据。为此,我创建了一个“Car”类。我希望将此类实例的一些属性作为布尔值,这样我就可以将此类的所有实例放入列表中并过滤它们。
我当前的解决方案不起作用,因为,我收到以下错误消息:
TypeError: __repr__ returned non-string (type Car)
我使用
__repr__
方法来获得可读的结果。该代码无需
__repr__
方法即可工作,但我的结果如下所示:
<__main__.Car object at 0x0000026FAB7960F0>
是否有可以返回布尔值的方法? 或者除了将所有属性更改为字符串之外还有其他选择吗?
这里是我的代码摘录:
l = []
class Car:
def __init__(self, MRSP : int, bid : int, buy : int, stock : bool, sellworthy : bool):
self.MRSP = MRSP
self.bid = bid
self.buy = buy
self.stock = stock
self.sellworthy = sellworthy
l.append(self)
def __repr__(self):
return Car(self.MRSP, self.bid, self.buy, self.stock, self.sellworthy)
Acura_NSX_2017 = Car(170000, "NA", "NA", True, True)
Acura_RSX_Type_S_2002 = Car(25000, "NA", "NA", True, False)
Acura_Integra_Type_R_2001 = Car(25000, "NA", "NA", True, False)
def what_sell(l):
res = []
for elements in l:
if elements.sellworthy == True:
res.append(elements)
print(res, end="")
what_sell(l)
错误来自于的
__repr__
方法返回一个
Car
对象而不是字符串。此方法用于为调试目的提供类的字符串表示形式。 尝试递归地创建
Car
对象,从而导致错误。
以下是如何解决的代码的方法:
class Car:
def __init__(self, MRSP: int, bid: int, buy: int, stock: bool, sellworthy: bool):
self.MRSP = MRSP
self.bid = bid
self.buy = buy
self.stock = stock
self.sellworthy = sellworthy
def __repr__(self):
# 这将返回类的更有意义的字符串表示形式
return f"Car(MRSP={self.MRSP}, bid={self.bid}, buy={self.buy}, stock={self.stock}, sellworthy={self.sellworthy})"
l = []
Acura_NSX_2017 = Car(170000, "NA", "NA", True, True)
Acura_RSX_Type_S_2002 = Car(25000, "NA", "NA", True, False)
Acura_Integra_Type_R_2001 = Car(25000, "NA", "NA", True, False)
l.append(Acura_NSX_2017)
l.append(Acura_RSX_Type_S_2002)
l.append(Acura_Integra_Type_R_2001)
def what_sell(l):
res = []
for elements in l:
if elements.sellworthy:
res.append(elements)
return res # 返回结果列表
result = what_sell(l)
print(result)
在这个修改后的代码中:
-
我们更正了
__repr__
方法 以返回描述Car
对象的字符串。 -
我们将
Car
对象显式追加到列表l
中。 -
我们修改了
what_sell
函数以返回结果列表 ,这是一种更干净的方法来返回和使用结果。
现在,该代码应该可以正常运行并按预期过滤汽车。
标签:python From: 78808751