我现在正在学习Python OOP,并与下面的代码混淆:
class Player:
def __init__(self, name):
self.name = name
def __str__(self):
return f"{self.name}"
class Team:
def __init__(self, name, players=None):
self.name = name
if players is not None:
self._players = list(players)
else:
self._players = []
def add_player(self, obj):
self._players.append(obj)
def __iter__(self):
return iter(self._players)
def __str__(self):
out = [f"Team: {self.name}", "Players:"]
out.extend(str(player) for player in self)
return "\n".join(out)
if __name__ == "__main__":
players = [Player("Afrasiab"),
Player("Babak"),
Player("Garshasp"),
Player("Jamshid"),
Player("Keyumars"),
Player("Katayoun"),
Player("Roham"),
Player("Tahmoores")]
iran = Team("Iran", players)
print(iran)
# equivalent:
print("Team:", iran.name)
print("Players:")
for player in iran:
print(player)
我想知道:
为什么在代码的第12行中 players 之前有下划线?
self._players = list(players)
简而言之,您能解释一下这段代码的工作原理吗?
答案 0 :(得分:0)
为什么在团队 init 团队中的玩家之前有下划线
Python中的__init__
方法是大多数其他OOP语言中的 Constructor 。
这是在实例化类的对象时调用的方法。
这意味着当您调用Player(“ NameOfPlayer”)时,将调用init方法。
为什么我们应该检查玩家是否不是无人
如果您将None
交给玩家列表list(None)
,则会导致TypeError。
为什么我们要在列表中的玩家之前放置列表
这真是个奇怪的代码,您应该在此处检查类型是Player还是Player的列表,否则抛出错误。
除了@Lomtrur的注释之外,self._players变量的下划线表示_players是私有变量。