我正试图以类似图形的方式模拟沿着道路行驶的汽车。每个Road对象都有一个源和目标。当一辆汽车到达路的尽头时,我希望道路将它送到下一条道路的起点。对于Road类,我的代码如下所示:
from collections import deque
class Road:
length = 10
def __init__(self, src, dst):
self.src = src
self.dst = dst
self.actualRoad = deque([0]*self.length,10)
Road.roadCount += 1
def enterRoad(self, car):
if self.actualRoad[0] == 0:
self.actualRoad.appendleft(car)
else:
return False
def iterate(self):
if self.actualRoad[-1] == 0:
self.actualRoad.appendleft(0)
else:
dst.enterRoad(actualRoad[-1]) #this is where I want to send the car in the last part of the road to the destination road!
def printRoad(self):
print self.actualRoad
testRoad = Road(1,2)
testRoad.enterRoad("car1")
testRoad.iterate()
在上面的代码中,问题出在方法iterate()的else部分:如何从当前Object的方法中调用另一个Object的方法?两种方法属于同一类。
答案 0 :(得分:1)
在我看来,你混淆了 class 和 object 之间的区别。
类是通过指定组成对象的属性和定义其行为的方法来建模对象的代码段。在这种情况下, Road 类。
另一方面,对象只是定义它的类的实例。因此,它具有由其属性值定义的状态。同样,在这种情况下, testRoad 是存储Road类对象的变量。
总之,虽然类是一个抽象模型,但该对象是具有良好定义状态的具体实例。
那么当你说你想要的时候:
从当前的Object方法
中调用另一个Object的方法
你真正想要的是在你的类中定义一个方法,允许你从同一个类的对象中调用另一个方法。
然后,为了这样做,类方法需要接收你想要调用你想要调用的任何方法的对象作为参数:
def iterate(self, destination_road):
if self.actualRoad[-1] == 0:
self.actualRoad.appendleft(0)
else:
destination_road.enterRoad(actualRoad[-1])
答案 1 :(得分:0)
您必须将另一个Object
作为参数提供给iterate
:
def iterate(self, other):
...
从该对象调用方法:
other.someMethod(...)