Sortieren von Objekten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

@Aeron: Ich denke schon das sortiert wird, aber nicht nach dem Zahlenwert der Punkte, sondern alphabetisch. Wenn Du Zahlen sortieren möchtest, müssen das auch wirklich Zahlen sein.

Code: Alles auswählen

In [822]: '10' > '2'
Out[822]: False

In [823]: 10 > 2
Out[823]: True
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Hallo Aeron,
irgendwie hast Du Dich mit Deinem Klassendesign
ziemlich arg in den Fuss geschossen.
Wieso brauchst Du eine extra Klasse 'HighscoreEntry'?
Zur Verwirrung traegt ausserdem bei,
dass Deine Klasse 'Highscore' ein Attribut 'HighscoreEntry' hat,
dies aber eine *Liste* von Eintraegen ist.

Damit Du auf etwas andere Gedanken kommst:
http://paste.pocoo.org/show/121872/

:wink:
yipyip
BlackJack

@yipyip: Also gegen die Klasse `HighscoreEntry` spricht IMHO nichts. Die weiss halt wie man sie mit anderen `HighscoreEntry`\s vergleicht. Alternative wäre ein Tupel, aber dann hätte man die sprechenden Bezeichner nicht mehr.

Und wehe es kommt jetzt jemand mit "named tuple" -- das gibt's in meiner Welt (Python 2.5) noch nicht. :-)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Bin davon ausgegangen, dass man eine Highscoreliste eigentlich
nur nach "Punkten" sortieren muss, daher erschien mir
eine extra Klasse fuer die Eintraege als etwas ueberdimensioniert.

named tuple?
Waren bis eben voellig neu fuer mich.

:wink:
yipyip
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Named Tuple sind quasi ein C-Struct ;) Ganz nett, aber ich denke in den meisten Fällen bieten sich eher Klassen an.
In meiner Welt gibts die schon :twisted:

Code: Alles auswählen

In [3]: from collections import  namedtuple
In [4]: Contributor = namedtuple("Contributor", "name email")

In [5]: contributor = Contributor("John Doe", "john.doe@example.net")

In [6]: contributor.name
Out[6]: 'John Doe'

In [7]: contributor.email
Out[7]: 'john.doe@example.net'
Aeron
User
Beiträge: 7
Registriert: Montag 8. Juni 2009, 18:27

Soo... hat gereicht im Konstruktor der HighscoreEntry-Objekte einfach die Punkte nach Integer zu casten :)

Code: Alles auswählen

class HighscoreEntry(object):
        
    def __init__(self, n, s, d):
        self.PlayerName=n
        self.Score=int(s)
        self.Date=d
Danke für die Hilfe.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich würde s (was neben n und d ein sehr schöner Name ist) gleich als Integer übergeben. Eine Typumwandlung in der Funktion __init__ ist nicht schön.

Edit: __init__ ist kein Konstruktor!
Zuletzt geändert von derdon am Dienstag 9. Juni 2009, 19:36, insgesamt 1-mal geändert.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

  • __init__ ist nicht der Kontruktor.
  • Python ist eine stark typisierte Sprache da castet man nichts.
Antworten