如何让每个实例调用使其具有自己的布尔值?

时间:2018-08-29 11:13:57

标签: python

我有一辆汽车及其行驶里程(以米为单位)的列表(我从游戏API中获取数据,但这里将使用一个函数示例。)因此,每辆汽车在 started = false 并具有一个功能,如果它们开始并行驶超过1米,它将返回。

metersdriven = 0
started = False

def getCarState(id):
    if id == 1:
        return 290
    if id == 2:
        return 0
    if id == 3:
        return 1200


def init(driver):
    global metersdriven, started       

    metersdriven = getCarState(driver)    

    if not started:
        if metersdriven > 1:
            started = True
            return metersdriven
        else:
            return 'Not started'
    else:    
        return 'Not started'

那是代码,这就是我的意思:

fd = init(1)
sd = init(2)
td = init(3)

>>> print(fd)
290

>>> print(sd)
'Not started'

正如您在上面看到的,我们还没有遇到问题,但是现在出现了问题

>>> print(td)
'Not started'

我们实际上想检查第三辆车,但它返回了“未启动” ,这不是事实,它实际上已经行驶了1200米。

我可以理解,这是由我们最初打电话检查第一辆车并因此使开始为True 引起的。如果我们首先叫第三辆车,它将返回1200米,反之亦然。

那么我该如何解决呢?如何使每辆汽车都具有自己的布尔值?我需要使用课堂吗?

2 个答案:

答案 0 :(得分:1)

是的,您可以为此使用类,因为它将使您轻松管理实例。如下所示就足够了:

class Car:
    def __init__(self, mileage):
        self.mileage = mileage
        self.started = False

    def start(self):
        self.started = True if self.mileage > 0 else False
    def stop(self):
        self.started = False

现在创建一个这样的实例:

>>> sd = Car(1200) # 1200 is the mileage
>>> fd = Car(0)    # this one has 0 mileage
>>> sd.started
False
>>> sd.start()
>>> sd.started
True
>>> fd.start()
>>> fd.started
False # because mileage is 0

答案 1 :(得分:0)

只需一起删除started变量,并仅使用驱动的仪表来检查汽车是否已行驶。