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