0

我是编程新手,所以如果这很明显,请多多包涵。

我在同一个 *.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)

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

"redbrick" 是 buliding 类的一个实例,为了让它工作 "building.getfloors() ,我必须传递一个 builiding 的实例,否则我会得到

“必须使用构建实例作为第一个参数调用未绑定的方法 getFloors()(什么都没有)”

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

白砖=建筑()

红砖=建筑()

黄砖=建筑()

4

1 回答 1

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 中工作的一些想法,也有一种存储不同类实例之间关系的简单方法。

于 2013-04-03T23:21:13.803 回答