繁体   English   中英

使用列表实例化 class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM