Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 怪诞的表演_Python - Fatal编程技术网

Python 怪诞的表演

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

我的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, 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完成了,但我不推荐任何东西。