2017-12-03 3 views
0

Ich bin neu in Python und ich bleibe in diesem Fehler stecken. Ich will Namen und Jahre der Geburt von Tieren in der Mannschaft in einer Ordnung durch den Namen drucken. Jetzt drucke ich immer wieder Jahre und Namen, aber ohne Reihenfolge. Ich wollte Lambda verwenden, aber als Fehler tritt auf. Kannst du mir bitte helfen?AttributError 'str' Objekt hat kein Attribut

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) 

Linie, in sortiert (Mitgliederliste, key = lambda Mitglied: member.name) Attribute: 'str' -Objekt hat kein Attribut 'name'

+3

Würde Ihren Code zu beheben zuerst gut sein - ich denke, dass einige Namen in den falschen Positionen sind – erocoar

+0

Welche Attribute? Vollständigen Fehler posten! –

+0

'list_members' ist eine alternierende Liste von Werten (Sie fügen zwei Attribute in jeder Schleife an), keine Klassenobjekte. – roganjosh

Antwort

1

Hier ist eine weitere mögliche Lösung:

Um ein Objekt einer Klasse, die Sie erstellt haben, zu drucken, müssen Sie die __str__() Methode oder die __repr__() Methode als eine offizielle String-Repräsentation Ihrer Objekte implementieren. So, hier ist die modifizierte Animal Klasse:

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) 

Das nächste, was ich vereinfacht Ihre add_member() Methode, weil es keinen Grund für self.member = member war:

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

Als nächstes ich modifizierte Ihre print_team() Funktion wie folgt aus:

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) 

Sie können einfach jedes Objekt vom Typ Animal in dieeinfügenListe. Danach können Sie Ihre Liste mit sort() sortieren und dann ausdrucken. Der folgende Code:

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) 

erzeugt das folgende Ergebnis:

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