更改布尔值的状态

时间:2014-01-24 23:14:05

标签: python list

class State():

    def __init__(self, state):
        self._state = state

    def change(self): #should not return anything, just changes the state
        self._state = not self._state

class Coin():

    def __init__(self, coin):
        self._coin = []
        for i in range(coin):
            self._coin.append(State(False)._state)

    def __str__(self):
        return "coins:  " + str(self._coin)

    def change_state(self, n):
        self._coin[n] = State(self._coin[n]).change()

我遇到的问题是change_state方法将状态从False / True更改为None,而不是将其更改为True或False。我不确定我到底做错了什么。

c1 = Coin(10)
print(c1)
coins:  [False, False, False, False, False, False, False, False, False, False]
c1.change_state(4)
print(c1)
coins:  [False, False, False, False, None, False, False, False, False, False]

1 个答案:

答案 0 :(得分:2)

问题在于这一行:

self._coin[n] = State(self._coin[n]).change()

在Python中,如果函数或方法未指定返回值,则返回None

您应该将该行更改为:

self._coin[n] = State(self._coin[n])
self._coin[n].change()

而不是使用change()的返回值。