我用Python创建了几个对象但是当我试图回想起它时我得到一个名为“'int'的错误对象没有属性”
请注意参数VehicleID,VehPosition,VehSpeed会不断更新程序。我想要的是将所有数据存储在单独的对象中。
这是我的代码
objectNumber.py
class VehicleNumber:
def __init__(self, name):
self.name= name
self.SpeedList=[]
self.PositionList=[]
def set_Speed (self,VehicleSpeed):
self.SpeedList.append(VehicleSpeed)
def set_Position (self,VehiclePosition):
self.PositionList.append(VehiclePosition)
这是我的主要课程
class main :
VList = []
def calculation():
VehicleID =infVeh.ID # VehicleID is an Integer which is generating from a program each time I run this code ex :- 1 ,2 ,3 ,4 ,5
VList.append(VehicleID)
condition = VehicleID in VList
if ( condition == False) :
VList.append(VehicleID)
VehicleID = VehicleNumber('car')
VehicleID.set_Speed(VehSpeed)
VehicleID.set_Position(VehPosition)
print(VehicleID.SpeedList)
print(VehicleID.PositionList)
else :
VehicleID.set_Speed(VehSpeed)
VehicleID.set_Position(VehPosition)
print (VehicleID.SpeedList)
当我运行代码而没有其他部分它运行正常,但当我再把其他部分放回去时它给了我'int'对象没有属性'set_Speed'
我最初的目标是为每辆进入系统的车辆创建一个新对象,然后更新其速度和位置。
非常感谢你提前
答案 0 :(得分:2)
您问题的直接答案是您的“else子句”从未定义 VehicleID 。 “if子句”中的相应行将是:
VehicleID = VehicleNumber('car')
这样做可以让你在vehicleID上调用你的setter-methods(这是VehicleNumber的一个实例)。
由于您没有在“else-clause”中对VehicleNumber进行类似的实例化,因此您也无法调用其方法。
现在,就像其他人一样,我认为你并没有真正粘贴整个班级。因为你发布的片段不清楚为什么要开始使用VehicleID。我们是否正确地假设您“main-class”中的某个地方定义/移交VehicleID?
为您提供条件声明: 为什么不使用像
这样的东西if VehicleID in VList:
foo
else:
bar
根据您的其他信息/编辑问题总结一下,以下内容应该如何让您前进。
class Main(object):
vehicle_id_list = []
def calculation(self):
vehicle_id = infVeh.ID # some magical integer that we acept as deu ex machina
self.vehicle_list.append(vehicle_id)
condition = VehicleID in VList
if vehicle_id not in self.vehicle_id_list:
vehicle_id_list.append(vehicle_id)
vehicle = VehicleNumber('car')
vehicle.set_Speed(VehSpeed)
vehicle.set_Position(VehPosition)
print(vehicle.SpeedList)
print(vehicle.PositionList)
else :
vehicle = VehicleNumber('car')
vehicle.set_Speed(VehSpeed)
vehicle.set_Position(VehPosition)
print (VehicleID.SpeedList)
现在,您真正关心的是条件声明是检查车辆ID是否已经在您的列表中。如果不是你想要追加它。 之后已经考虑了if子句以及else子句做同样的事情:调用你的setter并打印结果。 你不妨将其缩短为:
if vehicle_id not in self.vehicle_id_list:
vehicle_id_list.append(vehicle_id)
vehicle = VehicleNumber('car')
vehicle.set_Speed(VehSpeed)
vehicle.set_Position(VehPosition)
print(vehicle.SpeedList)
print(vehicle.PositionList)
除了您原来的问题,您可能想检查一下您是否觉得重新考虑一些风格选择是有用的。
答案 1 :(得分:0)
您在int
车辆ID和自定义类VehicleNumber
对象中感到困惑。
没有使用else子句而没有遇到错误的原因是if
永远不会被执行。
执行此操作后:
VList.append(VehicleID)
条件永远不会变错。同样在if子句中,你有
VehicleID = VehicleNumber('car')
在else子句中,您没有创建此对象。我想你想要的是对这个对象进行操作而不是整数VehicleID
。
我建议你重命名为
vehicle = VehicleNumber('car')
答案 2 :(得分:-1)
将每个对象放入字典而不是列表中,并使用标识符 VehicleID 来检索 VehicleNumber 对象。
类似的东西:
class VehicleNumber:
def __init__(self, id_, name):
self.id_ = id_
self.name= name
self.SpeedList=[]
self.PositionList=[]
def set_Speed (self,VehicleSpeed):
self.SpeedList.append(VehicleSpeed)
def set_Position (self,VehiclePosition):
self.PositionList.append(VehiclePosition)
__main__:
VDict = {}
def calculation(VehicleID, VehSpeed, VehPosition):
if not VehicleID in VDict:
vehicle = VehicleNumber(VehicleID, 'car')
vehicle.set_Speed(VehSpeed)
vehicle.set_Position(VehPosition)
VDict[VehicleID] = vehicle
print(vehicle.SpeedList)
print(vehicle.PositionList)
else :
vehicle = VDict.get(VehicleID)
vehicle.set_Speed(VehSpeed)
vehicle.set_Position(VehPosition)
print (vehicle.SpeedList)
calculation(1, 50, 'home')
calculation(1, 60, 'work')
calculation(2, 80, 'other')
print(VDict.get(1).__dict__)