【问题标题】:How add add class instances to a list如何将添加类实例添加到列表
【发布时间】:2018-09-16 16:52:26
【问题描述】:

我正在努力在课堂上做得更好。我想将多辆汽车(具有车牌号和时间等属性(用于安全摄像头))添加到列表中。我确实可以正常工作,但现在突然不行了,我不知道发生了什么。

class CarID:
  def __init__(self, camera, cartime, plate):
    self.camera = camera
    self.plate = plate
    self.cartime = cartime

class Cars:
  def __init__(self):
    self.cars = []

  def addCar(self, car):
    self.cars.append(car)

主程序:

def make_lists_cars(data):
  car_list = Cars()
  with open(data, newline='') as f:
    f = f.readlines()
    for line in f[2:-2]:
        car = line.split("\t") 
        camera = car[0]
        cartime = car[1]
        plate = car[2]
        car_list.addCar(CarID(camera, cartime, plate))
  return car_list


data = 'verkeer.txt'
car_list = make_lists_cars(data)
print(Cars().cars)

这给了我一个空列表。汽车变量看起来都像 ['1', '09:01:53', '2-ABC-32\n']。我实际上想要一个带有属性的汽车列表。 几个小时前我让它工作了,但后来我想添加第二个列表,现在它停止工作:(。 我还必须返回 car_list,还是没有必要?

谢谢

【问题讨论】:

  • 我怀疑文件解析。
  • @StephenRauch,总的来说你是对的,但我很确定这是print(Cars().cars)中的新实例
  • 我建议在你的类中添加一个__str__() 方法。这将允许您执行 print(car_list) 之类的操作。

标签: python list class


【解决方案1】:

Cars().cars 正在从Cars 的新实例访问属性cars。代码最后一行中的Cars() 刚刚被初始化,并且Cars()cars 属性中没有添加任何CarId 对象。而是从make_lists_cars的返回结果中查找cars

print(car_list.cars)

【讨论】:

  • 我稍微改变了你的术语。希望你不要介意。
  • @MadPhysicist 一点也不。答案大大提高了。
  • 好的,谢谢,这行得通。但是 car_list 和 Cars() 指的是同一个类,对吧?那么为什么你不能直接执行 'Cars().addCar' 命令
  • @JordySchep 没有。 car_list 是类Cars实例,而表达式Cars() 正在调用类对象Cars,它返回一个新实例那堂课。您不会期望 x = list()y = list() 创建相同的列表实例,对吗?
  • @JordySchep 将类视为如何构建对象的秘诀可能会有所帮助。当您执行car_list = Cars() 时,Python 会按照该配方构建它所描述的东西。 Cars 是配方(类)。 car_list 是事物(实例)。所以说“car_listCars()”指的是同一个类没有多大意义,因为它们不是指配方,而是指按照该配方创建的对象。
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 2018-05-18
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多