我有一個叫做 Player 的類...
class Player:
def __init__(self,name,score=6):
self.name=name
self.score=score
self.roll = 0
...我有一門課叫游戲
class Game:
def __init__(self,players):
self.current_round = 1
self.players=players
self.winner_round= None
self.player_names=[]
目前我可以使用以下方法實體化Game該類:
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類:
player_list=['Kid1','Kid2','Mom','Dad']
game = Game(player_list)
我怎樣才能做到這一點?
解決方案:
創建/實體化Game類時,通過:
game = Game(player_list)
我沒有先創建任何Player物件。由于我的Game課程要求玩家存在,因此失敗并給出以下錯誤:
AttributeError: 'str' object has no attribute 'score'
這是因為,根據Game那里沒有Players;因此沒有score可供Game班級使用。
Game通過此命令實體化:
game=Game([Player(name) for name in player_list])
我現在正在同時實體化Game 和創建必要的Player物件。
有許多正確的答案展示了不同的方法來做到這一點。
uj5u.com熱心網友回復:
顯而易見的解決方案(在評論中指出)是創建Player物件串列以將其傳遞給Game:
player_list = ['Kid1', 'Kid2', 'Mom', 'Dad']
game = Game([Player(s) for s in player_list])
另一種選擇是將其封裝為類方法
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)
uj5u.com熱心網友回復:
為此,您可以在 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=[]
uj5u.com熱心網友回復:
game = Game([Player ('jack')]) 應該可以作業。將更多玩家添加到串列中
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/388111.html
上一篇:個人日常開發工具、問題收集
