gpt4 book ai didi

Python 对象声明不起作用

转载 作者:行者123 更新时间:2023-11-30 23:34:27 25 4
gpt4 key购买 nike

我真的希望这不会重复...如果是的话,我在任何地方都找不到答案,所以我很抱歉。

不管怎样,我的问题是,我正在编写代码,如果我获得的数据需要一个团队而不是一个玩家,我有一个类(称为团队),它包含两个 SinglePlayers (也是一个类),然后是一个很少有其他属性,只是字符串。问题是,当我迭代循环、读取 xml 数据并填充“team”变量时,似乎 SinglePlayers 的所有信息都没有重置。这是一个问题,因为每次我将新的“团队”插入到我拥有的“团队”对象列表中时,它都会更改该信息。代码很长,所以我只发布相关的内容。

我才再次使用 python 几天。去年我一直在使用 java 和 c++ 工作,所以我的大脑中已经有了关于变量和结构如何工作的这些概念。我知道 python 是不同的,所以如果有人能澄清为什么这不起作用,那就太棒了。谢谢!

class SinglePlayer:
entry_code = ""
first_name = ""
last_name = ""
nation = ""
seed_rank_sgl = ""
seed_rank_dbl = ""
entry_rank_sgl = ""
entry_rank_dbl = ""

class Team:
top_player = SinglePlayer()
bottom_player = SinglePlayer()
entry_code = ""
seed_rank = ""
entry_rank = ""

def DoublesEvent(self, team_nodes):

#Create List to store team objects
teams_list = []

for k in range(0, team_nodes.length):
#Get the current node
teams_node = team_nodes.item(k)
team_node = team_nodes.item(k).getElementsByTagName("Player")
top_player_node = team_node.item(0)
bottom_player_node = team_node.item(1)

#Make a new team object to fill and add to teams_list
team = Team()
team.entry_code = teams_node.getAttribute("EntryCode")

#Top Player Info
team.top_player.first_name = top_player_node.getAttribute("FirstName")
team.top_player.last_name = top_player_node.getAttribute("LastName")
team.top_player.nation = top_player_node.getAttribute("Nation")


#Bottom Player Info
team.bottom_player.first_name = bottom_player_node.getAttribute("FirstName")
team.bottom_player.last_name = bottom_player_node.getAttribute("LastName")
team.bottom_player.nation = bottom_player_node.getAttribute("Nation")

eam.seed_rank = self.GetSeedRank(team)
team.entry_rank = self.GetEntryRank(team)

#Add the team to the list
teams_list.append(team)


return teams_list

最佳答案

您的持有对两个SinglePlayer()实例的引用,而不是您的实例。使用 __init__ 方法为每个 Team 实例创建实例:

class Team:        
entry_code = ""
seed_rank = ""
entry_rank = ""

def __init__(self):
self.top_player = SinglePlayer()
self.bottom_player = SinglePlayer()

事实上,由于您在创建的实例上重新绑定(bind)了每个字符串属性,因此您碰巧为这些实例创建实例属性。您最好也将它们移至 __init__ 中,并使它们作为实例属性的关系明确:

class Team:        
def __init__(self):
self.entry_code = ""
self.seed_rank = ""
self.entry_rank = ""
self.top_player = SinglePlayer()
self.bottom_player = SinglePlayer()

并对您的 SinglePlayer 类执行相同的操作。

关于Python 对象声明不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com