如何回调在Python中创建的对象
我已经在Python中创建了几个对象,但是当我试图回忆它们时,我得到了一个名为“int”的错误,Object没有属性 请考虑通过程序不断更新参数车辆、车辆、车辆速度。我想要的是将所有数据存储在单独的对象中 这是我的密码 objectNumber.py如何回调在Python中创建的对象,python,list,object,inheritance,Python,List,Object,Inheritance,我已经在Python中创建了几个对象,但是当我试图回忆它们时,我得到了一个名为“int”的错误,Object没有属性 请考虑通过程序不断更新参数车辆、车辆、车辆速度。我想要的是将所有数据存储在单独的对象中 这是我的密码 objectNumber.py class VehicleNumber: def __init__(self, name): self.name= name self.SpeedList=[] self.PositionList=[] def set_
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)
当我在没有else部分的情况下运行代码时,它运行得很好,但当我再次将else部分放回时,它会给我“int”对象没有属性“set_Speed”
我最初的目标是为进入系统的每辆车创建一个新对象,然后更新其速度和位置
非常感谢您您对int vehicle id和自定义类VehicleNumber对象感到困惑
如果不执行if-never子句,您就不会遇到错误
一旦您这样做:
VList.append(VehicleID)
这个条件永远不会变假。同样在if子句中,您有
VehicleID = VehicleNumber('car')
但是,在else子句中,您没有创建此对象。我猜你想要的是对这个对象进行操作,而不是对整数VehicleID进行操作。
我建议你把它改名为
vehicle = VehicleNumber('car')
将每个对象放入字典而不是列表中,并使用标识符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__)
您的问题的直接答案是您的else子句从未定义VehicleID。 if子句中的对应行为:
VehicleID = VehicleNumber('car')
这样可以在vehicleID上调用setter方法,vehicleID是VehicleNumber的一个实例
由于在else子句中没有对VehicleNumber进行类似的实例化,因此也无法调用其方法
现在,就像其他人一样,我假设你实际上没有粘贴整个类。因为从你发布的代码片段来看,不清楚为什么VehicleID应该是一个开始。我们假设在主类中的某个地方定义/移交VehicleID是否正确
关于你的条件语句:
为什么不使用类似于
if VehicleID in VList:
foo
else:
bar
根据您的附加信息/编辑的问题总结一下,下面的内容应该如何帮助您
现在,您真正关心的条件语句就是检查车辆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)
除了你原来的问题,你可能还想检查一下,重新考虑一下你的一些风格选择是否有用
给出一些关于类和属性名称的有用建议
每个标识都应该是
也许“Vehicle”比VehicleNumber更像一个类名,因为您的对象存储了更多关于车辆的信息。。
因此,当您像在if子句中那样实例化特定的VehicleNumber时,您可以将其存储在类似vehicle not VehicleID的变量中。
与许多其他OO语言不同,python不鼓励setter/getter。有关介绍,请参见
在您的计算函数中,我没有看到定义VehicleId。似乎您正在以某种方式将其设置为整数,而不是VehicleNumber的实例只是一个简短的问题,在主文件中,VehicleID是什么?您是否声明它并将其初始化为“无”?该条件始终为False,因此在没有elseP.s的情况下没有错误。如果condition==False在您的情况下永远不会为真,并且您的缩进有点奇怪,请更新您的代码,似乎缺少与VehicleId有关的内容。@camz谢谢。VehicleID是由程序生成的。我不想在这里添加该部分,因为它会使问题复杂化。谢谢Marco,我将尝试此代码并让您知道。谢谢你的帮助
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)