簡體   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