【发布时间】:2023-03-03 15:56:01
【问题描述】:
我来自 C++ 背景,如果没有 Python 中的整个指针概念,我有点迷茫。或者至少还不清楚。 例如,我想在 Python 中使用 OOP 创建一个刻度线游戏。我有几个这样的课程:
class Game(object):
def __init__(self, player1, player2):
self.board = [['','',''],
['','',''],
['','','']]
self.players = [player1, player2]
class Player(object):
def __init__(self, game, marking):
self.game = game
self.marking = marking # either 'X' or 'O'
很明显,游戏需要引用两个玩家,而玩家也是游戏的一部分,因此应该引用游戏。但是,上面的代码不起作用,因为如果不先创建游戏,我就无法创建玩家。但是要创建一个游戏,我需要两个玩家。
之后我可以通过执行以下操作来添加这些引用:player.game = some_game_reference 但这似乎不合 Python 且难以跟上。
完成此任务的最佳和最 Pythonic 方式是什么?
【问题讨论】:
-
object、player1等是有效的指针。它们不是值,就像在 C++ 中那样。 -
为什么玩家需要了解游戏?游戏由一个棋盘和两个玩家组成。游戏知道轮到谁了以及棋盘的状态。玩家无需了解游戏。
-
在 python 中你需要两个对象相互引用是非常罕见的。当您确实需要时,通常其中一个包含另一个,并且通常会在另一个上设置对自身的引用,最常见的是直接设置(此时对象已经紧密耦合)。
-
如果您创建一个游戏列表,您可以查询每个游戏是否包含特定玩家。这样一个玩家甚至可以参与多场比赛,而不仅限于一场比赛。或者创建一个类
Casino来跟踪哪个玩家正在玩哪个游戏。 -
老实说,您根本不应该在 Python 中考虑指针。它是一种比这更高级别的语言。没有实际的指针类型,但是“在底层”,您可以想到 Python 将指针传递给
Py_Object结构。但老实说,您应该阅读 Ned Batchelder 的 Facts and Myths about Python names and values
标签: python c++ class inheritance