2014-01-24 127 views
0
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

你實際上並沒有在這裏使用'State';只是在'_coin'中使用布爾值,並簡單地使'change_state'變成'self._coin [n] = not self._coin [n]' – jonrsharpe

+0

爲什麼你有一個單獨的'State'類? – deltab

回答

2

的問題是在這條線:

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

在Python中,如果一個函數或方法沒有指定返回值,則返回None

你應該該行更改爲:

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

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

+0

謝謝,但是有沒有一種方法可以將True替換爲<__main __。狀態對象爲0x02757230>?所以它看起來像這樣:coin:[False,False,False,False,True,False,False,False,False,False] – Sc4r

+0

@ Sc4r:當然,覆蓋'__repr__'或'__str__'來打印' _state'。 – mipadi