[英]Instantiate a class with a list
我有一个名为 Player 的 class...
class Player:
def __init__(self,name,score=6):
self.name=name
self.score=score
self.roll = 0
...我有一个名为 Game 的 class
class Game:
def __init__(self,players):
self.current_round = 1
self.players=players
self.winner_round= None
self.player_names=[]
目前我可以实例化Game
class :
player_1=Player('Kid1')
player_2=Player('Kid2')
player_3=Player('Mom')
player_4=Player('Dad')
game = Game([player_1,player_2,player_3,player_4])
但是,理想情况下,我更喜欢使用以下内容实例化Game
class:
player_list=['Kid1','Kid2','Mom','Dad']
game = Game(player_list)
我怎样才能做到这一点?
显而易见的解决方案(在评论中指出)是创建Player
对象列表,以便将其传递给Game
:
player_list = ['Kid1', 'Kid2', 'Mom', 'Dad']
game = Game([Player(s) for s in player_list])
另一种选择是将其封装为class方法
class Game:
def __init__(self, players):
self.current_round = 1
self.players = players
self.winner_round = None
@classmethod
def from_names(cls, player_names):
return cls([Player(s) for s in player_names])
player_list = ['Kid1', 'Kid2', 'Mom', 'Dad']
game = Game.from_names(player_list)
为此,您可以在 Game 的构造函数中实例化玩家。
就像是:
class Game:
def __init__(self,players):
self.current_round = 1
self.players=[Player(name) for name in players]
self.winner_round= None
self.player_names=[]
game = Game([Player ('jack')]) 应该可以工作。 将更多玩家添加到列表中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.