我有一些代码似乎打印[<__main__.TCar object at 0x0245C1B0>]
但我希望它打印列表的实际内容。
class TCar():
def __init__(self, Make, Model, EngineSize, Price):
self.Make = str(Make)
self.Model = str(Model)
self.EngineSize = float(EngineSize)
self.Price = float(Price)
Garage = []
for i in range(5):
Make = input("Please enter the make of the car: ")
Model = input("Please enter the model of the car: ")
EngineSize = input("Please enter the engine size of the car: ")
Price = input("Please enter the price of the car: ")
Garage.append(TCar(Make, Model, EngineSize, Price))
print(Garage)
我的代码出了什么问题?
答案 0 :(得分:2)
您必须为此定义__str__
method或__repr__
方法:
class TCar():
def __init__(self, Make, Model, EngineSize, Price):
self.Make = str(Make)
self.Model = str(Model)
self.EngineSize = float(EngineSize)
self.Price = float(Price)
def __repr__(self):
return "<Car {0} {1} {2} {3}>".format(self.Make, self.Model, self.EngineSize, self.Price)
def __str__(self):
return "{0} {1}".format(self.Make, self.Model)
简而言之,
如果需要显示对象的“原始”内容,则使用 __repr__
,这是您在显示列表内容时看到的那种,所以如果您有车辆列表,它看起来像这样的:
[<Car Tesla Model S 500bhp $100000>, <Car Smart Fortwo 80bhp $5000>]
__str__
,例如print(TeslaCar)
TeslaCar
为TCar
个实例。它会给你类似"Tesla Model S"
。
答案 1 :(得分:1)
这里有一个对象列表。添加如下内容: -
def __str__(self):
print self.Make, self.Model, self.EngineSize, self.Price
这将打印对象的所有属性的值。或者您可以根据您的行为要求修改功能。
答案 2 :(得分:0)
您可以像这样覆盖__str__
或__repr__
:
class TCar():
def __init__(self, Make, Model, EngineSize, Price):
self.Make = str(Make)
self.Model = str(Model)
self.EngineSize = float(EngineSize)
self.Price = float(Price)
def __repr__(self):
return "{Make}-{Model} (v{EngineSize}/{Price}$)".format(**self.__dict__)
Garage = [TCar("Audi", "TT", "8", "80000")]
print(Garage)
# [Audi-TT (v8.0/80000.0$)]
此外,您可能需要查看有关__str__
与__repr__
的{{3}}。
答案 3 :(得分:0)
逐个打印属性而不是打印garange一次:print(self.attribute)。注意代码中的属性是对象的实例