Python实例引用访问方法

时间:2013-04-03 19:51:33

标签: python instance pass-by-reference

我是编程新手,所以如果这很明显,请耐心等待。

我在同一个* .py文件中有两个类。片段在下面。我正在尝试与客户一起模拟电梯,在主程序中我将创建n个客户。我想电梯类中的方法,称为startLift,能够访问客户的各个实例,但我不确定如何做到这一点,所以如果我遍历我的客户,在每次迭代时调用startLift,我该如何制作所以它引用了这个实例。

提前谢谢。

班级电梯:

def __init__(self):

    self.stops = building.getFloors(redbrick)

    if self.stops <1:
        print "elevator out of bounds"
    else:
        print "elevator has ",building.getFloors(redbrick),"stops"

我尝试重新解释这个问题:

self.stops = building.getFloors(redbrick)

我在电梯类中调用建筑方法,因此建筑物将信息传递给电梯类,告知它可以行驶多少层。

“redbrick”是buliding类的一个实例,为了使其工作“building.getfloors(),我必须传递一个构建的实例,否则我得到

“必须使用构建实例作为第一个参数调用未绑定方法getFloors()”(没有取而代之)“

但如果我创建它,如何将建筑物的多个实例传递到“building.getfloors()”,例如

whitebrick = building()

redbrick = building()

yellowbrick = building()

1 个答案:

答案 0 :(得分:1)

我打算在这里打破SO的基本规则,实际上并没有回答这个答案中的问题,但是这个评论太长了。

部分问题似乎是对类和实例如何使用python或一般编程的误解(这没有什么不妥,我们都学习了一段时间)。结果,你的问题是有效的,但是很尴尬,所以让我们退一步。

电梯的当前 init ()方法并没有按照描述的那样正常工作。要访问建筑物,您必须将其提供给电梯的 init ()。例如,您的Building和Elevator类(我正在利用它来表明它是一个类,而不是该类的实例),可能如下所示:

class Building:
    def __init__(self, floors=1, color=None):
        self.floors = floors
        self.color = color

    def getFloors(self):
        return self.floors


class Elevator:
    def __init__(self, building):
        self.stops = building.getFloors()
        self.current_floor = 1

然后,在您的主程序中,您将拥有类似的内容:

redbrick = Building(floors=4, color='red')
redbrick_elevator = Elevator(redbrick)

注意我的大写约定 - building是电梯的 init ()方法的参数,并且是Building类的一个实例。当我调用方法getFloors()时,它会在实例上调用,而不是在类中调用,而实例redbrick会自动作为self传递给getFloors()。

现在,您的旧(预编辑)客户类很好(但我称之为客户)。但是调用电梯的方法不起作用,因为客户没有被传入。例如,你可能有类似的东西:

class Elevator:
    def __init__(self, building):
        self.stops = building.getFloors()
        self.current_floor = 1
        self.customer_list = []
        self.stop_list = []

    def getCurrentFloor(self):
        return self.current_floor

    def callElevator(self, floor):
        self.stop_list.append(floor)

    def getOn(self, customer):
        self.customer_list.append(customer)
        self.stop_list.append(customer.getEndFloor())

    def letOff(self):
        for customer in self.customer_list[:]:
            if self.current_floor == customer.getEndFloor():
                self.customer_list.remove(customer)

...

希望这足以让你开始,既有关于类和实例如何在python中工作的一些想法,也有一种简单的方法来存储不同类的实例之间的关系。