用于循环打印类的内存位置而不是列表

时间:2015-02-05 10:03:45

标签: python class python-3.x for-loop

我有一些代码似乎打印[<__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)

我的代码出了什么问题?

4 个答案:

答案 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) TeslaCarTCar个实例。它会给你类似"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)。注意代码中的属性是对象的实例