2015-08-15 56 views
0

我正在寫一個國際象棋遊戲,我需要設置屬性self.selected每個棋子的實例(除當我點擊一個棋子並且self.selected被設置爲True時,我剛剛點擊的棋子實例等於False)。如果一個實例的屬性爲True,則將該類的每個其他實例的相同屬性設置爲False

我認爲問題在於,在超級類中繪製對象後,我將鼠標左鍵單擊到對象上,因此無法返回到可以管理外部不同實例的全局函數。

基本上(如果我對這個問題全有誤),我有我的棋子,當我點擊一個屬性self.selected成爲True。如果選擇了不同的棋子或者再次點擊同一個棋子,我需要再次將該屬性設置爲False。

+2

你需要發佈一些代碼示例 – orestisf

回答

0

這很容易用一個類變量做和property

class ChessPiece(object): 
    selected_piece = None # class variable 

    def select(self):  # call this on the piece that's been clicked upon 
     ChessPiece.selected_piece = self 

    @property 
    def selected(self): # test this attribute to see if a piece is curently selected 
     return ChessPiece.selected_piece is self 

你可以,如果你想使用全局變量,而不是一個類變量,你只需要在一個select聲明global方法,如果你這樣做,它可以修改全局變量而不是本地變量。

你也可以使用屬性的setter,而不是一個單獨的select方法,但這需要(略)更復雜的代碼來處理,如設置selectedFalse時,它已經False的事情。

+0

對不起,我是oop的新手,你有什麼教程可以推薦用於屬性,因爲我以前從未見過它們。另外,你爲什麼傳遞對象? – OliverGriffin

+0

從[官方文檔](https://docs.python.org/3/library/functions.html#property)開始,然後查找[其他答案](http://stackoverflow.com/questions/) 17330160 /如何 - 做最財產裝飾工作)? – Blckknght

相關問題