Python 怪诞的表演
我的for循环行为怪异。我想得到一个团队成员的名字,但我只得到了一个姓氏。你能告诉我哪里有问题吗Python 怪诞的表演,python,Python,我的for循环行为怪异。我想得到一个团队成员的名字,但我只得到了一个姓氏。你能告诉我哪里有问题吗 class Animal: def __init__(self, name): self.name = name class Team: def __init__(self, name): self.name = name self.members = [] def add_member(self, memb
class Animal:
def __init__(self, name):
self.name = name
class Team:
def __init__(self, name):
self.name = name
self.members = []
def add_member(self, member):
self.member = member
self.members.append(team.member)
def print_team(team):
list_members= []
for member in team.members:
list_members.append(team.member.name)
print (list_members)
team = Team('Wolves')
team.add_member(Animal('Josh'))
team.add_member(Animal('Janette'))
team.add_member(Animal('Peter'))
print_team(team)
我得到->彼得,彼得,彼得
我想得到->Josh,Janette,Peter为了可读性,您应该始终尝试将类相关的东西(如打印函数)放在类本身中。那么这样做怎么样:
class Animal:
def __init__(self, name):
self.name = name
class Team:
def __init__(self, name):
self.name = name
self.members = []
def add_member(self, member):
self.members.append(member)
def print_team(self):
print([i.name for i in team.members])
def __str__(self):
return str([i.name for i in team.members])
def print_team():
print([i.name for i in team.members])
team = Team('Wolves')
team.add_member(Animal('Josh'))
team.add_member(Animal('Janette'))
team.add_member(Animal('Peter'))
print_team() # option 1 - outside - not recommended
team.print_team() # option 2 - inside
print(team) # option 3 - inside using __str__ (best I'd say)
将此打印3次:
['Josh', 'Janette', 'Peter']
在
add_member
中,行self.member=member
的用途是什么?将对象的属性.member
设置为最后添加的成员。使用类似于.last\u added的名称
或者使用def add_member(self,member):self.members.append(member)
,调用函数时直接附加传递的对象的内容
然而,这对我来说并不重要。在循环中,您需要将list\u members.append(team.member.name)
更改为list\u members.append(member.name)
。如前所述,您正在添加最后添加的成员。当您更改它时,您将添加在循环中获得的成员。这将使差异更加显著:
def print_team(team):
list_private_to_func = []
for object in team.members:
list_private_to_func.append(object.name)
print(list_private_to_func)
是的,@Anton vBR有更好的方法来解决这个问题 您正在打印团队中使用team.member.name。它始终采用team.member的最后一个初始化值
您还可以对函数进行排序,
打印团队()中不需要使用循环。
只需在add_memeber函数中保存member.name
class Animal:
def __init__(self, name):
self.name = name
class Team:
def __init__(self, name):
self.name = name
self.members = []
def add_member(self, member):
self.member = member
self.members.append(member.name)
def print_team(team):
print team.members
team = Team('Wolves')
team.add_member(Animal('Josh'))
team.add_member(Animal('Janette'))
team.add_member(Animal('Peter'))
print_team(team)
将self.members.append(team.member)
替换为self.members.append(member)
,并删除前一行<代码>团队
使用同名的全局变量。这没有意义!print_team应该是类团队中的一个函数。这可能会发生,但如果我想拥有这个函数呢?@RoseAnn我制作了一个“普通函数”,并使用了“str函数”。或者你的意思是你想要一个类外的普通函数?@RoseAnn完成了,但我不推荐任何东西。