Python изменяет значения моих переменных - PullRequest
0 голосов
/ 31 марта 2019

Я запускаю симуляцию для концерта, в которой я генерирую количество времени, которое каждый поклонник проводит перед сценой, прежде чем заняться чем-то другим (купить еду, напитки или пойти в туалет). Однако время, которое я установил для них, не является временем, которое используется в обратном отсчете, пока они не уйдут, чтобы заняться чем-то другим.

Во время обратного отсчета я получил сообщение о том, что не могу использовать операнд += для NoneType и int, и после изменения способа назначения пребывания я понял, что многие времена пребывания были изменены.

Fan код класса

class Fan:
    stay = 0
    def __init__(self, gender):
        self.gender = gender

Этот код создает веер, вычисляет, как долго они будут находиться перед сценой, и добавляет их в область фронта сцены.

   for i in range(200):
       x = random.randint(1,10)
       if x <= 7:
           f = Fan("f")
           f.stay = stage.calcstay()
           stage.addfan(f)
           print(i,": ",f.stay)
       else:
           f = Fan("m")
           f.stay = stage.calcstay()
           stage.addfan(f)
           print(i,": ",f.stay)

Здесь функция обратного отсчета времени, в течение которого вентиляторы находятся перед сценой. (буквально следующий бит кода)

for x in range(360):
    stagefunction()

Это stagefunction() метод:

def stagefunction():
    if len(stage.fans) > 0:
        for i in range(len(stage.fans)):
            print(i,": ",stage.fans[i].stay)
            stage.fans[i].stay += -1
            if  stage.fans[i].stay <= 0:
                movefromstage(i)
            stage.TTS += 1
    return

Я ожидал, что stagefunction() будет вызываться несколько раз каждый раз, уменьшая количество времени, оставшегося до каждого вентилятора в передней части сцены, на 1 и удаляя тех, кто не должен оставаться больше. Однако я даже не могу пройти через stagefunction() даже один раз, потому что время пребывания меняется, и обычно около начала 190-х годов значение меняется на NoneType

1 Ответ

0 голосов
/ 31 марта 2019

stay - это class variable, а не instance variable.Это означает, что значение stay универсально для всех экземпляров класса, и если вы хотите изменить его, вы должны изменить его из класса, а не из экземпляра.

Чтобы определить instance variableвставьте его в вашу __init__() функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...