如何回调在Python中创建的对象

如何回调在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_

我已经在Python中创建了几个对象,但是当我试图回忆它们时,我得到了一个名为“int”的错误,Object没有属性

请考虑通过程序不断更新参数车辆、车辆、车辆速度。我想要的是将所有数据存储在单独的对象中

这是我的密码

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)
当我在没有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)