【问题标题】:AttributeError 'str' object has no attributeAttributeError 'str' 对象没有属性
【发布时间】:2017-12-04 02:40:19
【问题描述】:

我是 python 新手,我陷入了这个错误。我想按名称顺序打印团队中动物的名称和出生年份。现在我一直在打印年份和名字,但没有顺序。我想使用 lambda 但发生错误。你能帮帮我吗?

class Animal:
    def __init__(self, name):
        self.name = name

class Team:
    def __init__(self, name):
        self.name = name
        self.year_of_birth = year_of_birth
        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(member.name)
        list_members.append(member.year_of_birth)
        print('{} ({})'.format(member.name ,member.year_of_birth) )

    print (list_members)

    for memeber in list_members:
        sorted(list_members, key = lambda member: member.name)

    print (list_members)

team = Team('Wolves')
team.add_member(Animal('Josh', 2015))
team.add_member(Animal('Quinn', 2016))
team.add_member(Animal('Peter', 2010))
print_team(team)

行,在 排序(成员列表,键 = lambda 成员:成员名称) AttributeError: 'str' 对象没有属性 'name'

【问题讨论】:

  • 最好先修复您的代码 - 我认为有些名称的位置错误
  • 什么属性?发布完整错误!
  • list_members 是一个交替的值列表(在每个循环上附加两个属性),而不是类对象。
  • 我完全忘记了。对不起。这是修改后的版本
  • 检查拼写例如会员

标签: python


【解决方案1】:

这是另一种可能的解决方案:

为了打印您创建的任何类的对象,您必须实现__str__() 方法或__repr__() 方法作为对象的正式字符串表示。所以,这里是修改后的Animal 类:

class Animal:
    def __init__(self, name, year_of_birth):
        self.name = name
        self.year_of_birth = year_of_birth # Added this field because your created Animal objects had it in the example.

    def __str__(self):
        return self.name + " " + str(self.year_of_birth)

    def __repr__(self):
        return self.name + " " + str(self.year_of_birth)

接下来,我简化了你的add_member() 方法,因为self.member = member 没有理由:

def add_member(self, member):
        self.members.append(member)

接下来,我像这样修改了你的print_team() 函数:

def print_team(team):
    list_members= []
    for member in team.members:
        list_members.append(member)

    print("Unsorted: ")
    print (list_members)

    list_members.sort(key = lambda animal: animal.name)

    print("Sorted by name: ")
    print (list_members)

您可以简单地将Animal 类型的任何对象附加到list_members 列表中。之后,您可以使用sort() 对列表进行排序,然后打印出来。代码如下:

team = Team('Wolves',2015)
team.add_member(Animal('Josh',2015))
team.add_member(Animal('Quinn',2145))
team.add_member(Animal('Peter',3000))
print_team(team)  

产生以下结果:

Unsorted: 
[Josh 2015, Quinn 2145, Peter 3000]
Sorted by name: 
[Josh 2015, Peter 3000, Quinn 2145]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2021-10-04
    • 2019-12-02
    • 2021-09-25
    • 2014-03-04
    • 2013-09-22
    • 2018-09-19
    相关资源
    最近更新 更多