gpt4 book ai didi

python - 正确使用 super() 到 .pop() 从每个子实例的父类列表中删除名称

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:43 25 4
gpt4 key购买 nike

我正在构建一个游戏,其中我创建了一个 ComputerPlayer() 类,它是 Players() 类的子类。我在子类中的构造函数中使用 Players() 类中的名称列表,以便在每次实例化每个计算机播放器时随机获取每个计算机播放器的名称,并使用 pop() 将其关闭,因此名称不能分配两次。代码如下所示:

class Players(object):

names = ['Carl', 'James', 'Bob', 'Jamal', 'Kris', 'Andy', 'Rupert', 'Gerald', 'Pat',
'Gloria', 'Hannah', 'Priscilla', 'Sarah', 'Silvia']

class ComputerPlayer(Players):

def ___init___(self):
self.name = super(ComputerPlayer, self).names.pop(randint(0, len(super(ComputerPlayer, self).names) - 1))

所以我想做的是为 Game() 类中的每个计算机化玩家实例化一个新的 ComputerPlayer() 对象,如果我总是想要相同的数量我可以轻松合作的玩家:

class Game(object):

def ___init___(self):
self.player1 = ComputerPlayer()
self.player2 = ComputerPlayer()
self.player3 = ComputerPlayer()

或者,如果我希望人类玩家能够选择他们想要对抗的计算机对手数量,我可以将参数传递给 Game() 并执行以下操作:

def __init___(self, num):
self.players = []
for x in range(0,num):
self.players.append(ComputerPlayer())

当我第一次开始这个问题时,我想知道是否有一种方法可以通过引用随机分配的名称来访问 ComputerPlayer() 的每个实例,但正如我所写的那样,我意识到有这样做并没有真正的好处,而且可能会让事情变得不必要的复杂化;这些名称实际上只是为了向人类玩家显示,以使游戏感觉更加“人性化”。

但是,尽管我知道我在 ComputerPlayer() 类中正确地使用了 super(),但它一定是 < em>首选的方法?使用对 Players().names 的直接引用也同样有效,而且它会大大缩短那段难看的代码。

Game() 类将具有控制游戏逻辑的主要方法,那么它是创建我的个人计算机玩家的正确类吗?

如有任何其他意见、问题或建议,我们将不胜感激。顺便说一句,这款游戏将是“街头骰子”。谢谢!

最佳答案

你听起来好像这些名字只是用于计算机播放器。既然如此,为什么不将其放在 ComputerPlayer 类中并跳过使用 super 呢?

此外,如果您创建的计算机玩家数量超过 len(name),您的代码将会出错

关于python - 正确使用 super() 到 .pop() 从每个子实例的父类列表中删除名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26749732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com