自动实例化对象
automatically instantiating objects
players_list = [Ani, Paty, Felix, Alex]
class Player:
def __init__(self, name):
self.name = name
self.score = 0
self.vote = 0
self.player_hand = []
self.choice = ''
self.player_hand = []
def player_turn(self):
print(self.name, "'s turn")
def p_vote(self):
print(self.name, " voted")
我试图遍历列表,但它总是给我一个错误:NameError: name 'Ani' is not defined
for player in players_list:
player = Player(str(player))
但是手动完成所有过程:
Ani = Player("Ani")
,等等
有什么方法可以使这个过程自动化?
首先你应该知道,你声明的 players_list
不包含字符串,它们被认为是你没有在任何地方定义的变量,因此 NameError
.
现在,如果您想更正此问题,并且您确实打算将 Player 的对象存储在 players_list
中,那么您可以执行以下操作:
players_list = ["Ani", "Paty", "Felix", "Alex"]
class Player:
def __init__(self, name):
self.name = name
self.score = 0
self.vote = 0
self.player_hand = []
self.choice = ''
self.player_hand = []
def player_turn(self):
print(self.name, "'s turn")
def p_vote(self):
print(self.name, " voted")
for i in range(len(players_list)):
players_list[i]=Player(players_list[i])
这会将 Player 对象存储在您声明的列表中,这正是您希望获得的内容。
你遇到了未定义玩家的问题。所以 players_list = [Ani, Paty, Felix, Alex]
将抛出错误,因为对象 Ani
、Paty
、Felizx
和 Alex
不存在。
class Player:
def __init__(self, name):
self.name = name
self.score = 0
self.vote = 0
self.player_hand = []
self.choice = ''
self.player_hand = []
def player_turn(self):
print(self.name, "'s turn")
def p_vote(self):
print(self.name, " voted")
现在,我们需要遍历列表。
players_list = ['Ani', 'Paty', 'Felix', 'Alex']
players = [Player(player) for player in players_list]
听起来您正在尝试动态创建变量 - 编写代码的代码。
您可以尝试使用 exec
内置函数。
players = ['Ani', 'Paty', 'Felix', 'Alex']
class Player:
def __init__(self, name):
self.name = name
def p_vote(self):
print(self.name + " voted.")
for player in players:
exec( "%s = Player( '%s' )" %(player, player) )
Ani.p_vote()
尽管如此,一般的互联网建议有两点:
- 请谨慎使用
exec
。
- Pythonic 方式是写出变量,“显式优于隐式”。
players_list = [Ani, Paty, Felix, Alex]
class Player:
def __init__(self, name):
self.name = name
self.score = 0
self.vote = 0
self.player_hand = []
self.choice = ''
self.player_hand = []
def player_turn(self):
print(self.name, "'s turn")
def p_vote(self):
print(self.name, " voted")
我试图遍历列表,但它总是给我一个错误:NameError: name 'Ani' is not defined
for player in players_list:
player = Player(str(player))
但是手动完成所有过程:
Ani = Player("Ani")
,等等
有什么方法可以使这个过程自动化?
首先你应该知道,你声明的 players_list
不包含字符串,它们被认为是你没有在任何地方定义的变量,因此 NameError
.
现在,如果您想更正此问题,并且您确实打算将 Player 的对象存储在 players_list
中,那么您可以执行以下操作:
players_list = ["Ani", "Paty", "Felix", "Alex"]
class Player:
def __init__(self, name):
self.name = name
self.score = 0
self.vote = 0
self.player_hand = []
self.choice = ''
self.player_hand = []
def player_turn(self):
print(self.name, "'s turn")
def p_vote(self):
print(self.name, " voted")
for i in range(len(players_list)):
players_list[i]=Player(players_list[i])
这会将 Player 对象存储在您声明的列表中,这正是您希望获得的内容。
你遇到了未定义玩家的问题。所以 players_list = [Ani, Paty, Felix, Alex]
将抛出错误,因为对象 Ani
、Paty
、Felizx
和 Alex
不存在。
class Player:
def __init__(self, name):
self.name = name
self.score = 0
self.vote = 0
self.player_hand = []
self.choice = ''
self.player_hand = []
def player_turn(self):
print(self.name, "'s turn")
def p_vote(self):
print(self.name, " voted")
现在,我们需要遍历列表。
players_list = ['Ani', 'Paty', 'Felix', 'Alex']
players = [Player(player) for player in players_list]
听起来您正在尝试动态创建变量 - 编写代码的代码。
您可以尝试使用 exec
内置函数。
players = ['Ani', 'Paty', 'Felix', 'Alex']
class Player:
def __init__(self, name):
self.name = name
def p_vote(self):
print(self.name + " voted.")
for player in players:
exec( "%s = Player( '%s' )" %(player, player) )
Ani.p_vote()
尽管如此,一般的互联网建议有两点:
- 请谨慎使用
exec
。 - Pythonic 方式是写出变量,“显式优于隐式”。