我目前正在學習 python 并嘗試實現國際象棋。(我已經用多種不同的語言完成了這個)class Board: def __init__(self): self._reset() def _reset(self, func=Board.default_layout): self.values = [[0 for x in range(8)] for i in range(8)] self.currentPlayer = 1 func(self.values) @staticmethod def default_layout(values): passif __name__ == "__main__": b = Board()重置方法的想法是重置電路板。上面的棋子將被移除,并調用一個函數,將棋子放在初始布局中的板上。有國際象棋版本,其中有不同的起始布局。因此,我想使用默認方法使其成為可選參數:default_layout(self)但是,此代碼無法編譯,我想知道我的問題出在哪里。我收到錯誤消息:NameError: name 'default_layout' is not defined
2 回答

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
您def _reset(self, func=Board.default_layout):正在被評估為 的定義的一部分Board,因此Board.default_layout尚未定義。
您可以創建default_layout一個普通函數而不是靜態方法。在使用之前需要定義它。
def default_layout(values):
... whatever
class Board:
...
def _reset(self, func=default_layout):
...
或者,如果它必須是靜態方法,請不要嘗試在函數聲明中引用它。您可以在函數體中引用它,因為函數體在實際調用之前不會執行。
def _reset(self, func=None):
if func is None:
func = Board.default_layout

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
作為@khelwood 答案的替代方法,lambda
如果您更喜歡保留類default_layout
的靜態方法,也可以使用函數Board
。
改變:
def _reset(self, func=Board.default_layout):
至
def _reset(self, func=lambda values: Board.default_layout(values)):
添加回答
舉報
0/150
提交
取消