Dictionary- Konstruktor

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.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Samstag 2. Dezember 2006, 23:59

Puh, das weiß ich nicht. Das kann ich ncoh nicht beurteilen weil mir die entsprechende Erfahrung fehlt.

Aber mal ganz im vertrauen: BlackJacks Code haben zu 99% Hand und Fuss ;) Der weis __GANZ__ genau was er da Treibt :D

lg
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Sonntag 3. Dezember 2006, 00:10

XtraNine hat geschrieben:Puh, das weiß ich nicht. Das kann ich ncoh nicht beurteilen weil mir die entsprechende Erfahrung fehlt.

Aber mal ganz im vertrauen: BlackJacks Code haben zu 99% Hand und Fuss ;) Der weis __GANZ__ genau was er da Treibt :D

lg
8) :wink:
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sonntag 3. Dezember 2006, 00:12

rolgal_reloaded hat geschrieben:Inzwischen frage ich mich, ob es bei aller Eleganz die der Code von BlackJack hat, stilistisch nicht etwas seltsam ist eine Methode der Elternklasse mittels einer anderen Methode der Elternklasse zu überschreiben.
Wieso? In vielen Fällen ruft man in der überschriebenen Methode die entsprechende Methode der Elternklasse auf. In diesem Fall ist es aber sinnvoller, da effizienter, eine andere Methode der Elternklasse zu verwenden.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 3. Dezember 2006, 00:22

rolgal_reloaded hat geschrieben:Inzwischen frage ich mich, ob es bei aller Eleganz die der Code von BlackJack hat, stilistisch nicht etwas seltsam ist eine Methode der Elternklasse mittels einer anderen Methode der Elternklasse zu überschreiben.
Warum sollte sowas seltsam sein? Eine Kindklasse erweitert die Elternklasse ja und kann dabei doch durchaus auf Dinge zurückgreifen die die Elternklasse schon bietet - warum das Rad noch einmal erfinden? Dass eine von dict abgeleitete Klasse die Funktion iteritems() bietet, davon ist auszugehen - es wäre seltsam Dinge in der Kindklasse zu löschen.
Stellt euch vor, die Elternklasse macht etwas sehr flexibel und für den Benutzer dieser Klasse unpraktisch. Gehen wir mal vom Beispiel einer Klasse zur Versionsverwaltung aus:

Code: Alles auswählen

class HighlyFlexibleVCS(object):
   def update(self):
      # Code um den Checkout zu aktualisieren
      pass   
   def pull(self):
      # Code um den aktuellen Code aus einem entfernten Repository zu holen
      pass
   def commit(self):
      # Code um etwas einzuchecken
      pass
   def push(self):
      # Code um den aktualisierten Code an ein entferntes Repository zu schicken
      pass

class SimplifiedVCS(HighlyFlexibleVCS):
   def download(self):
      self.pull()
      self.push()
   def upload(self):
      self.commit()
      self.push()
Nun stellt die Klasse SimplifiedVCS einfach nur ein vereinfachtes Interface zu seiner Elternklasse dar und nutzt dessen Funktionen. Ok, das Beispiel ist zugegebenermaßen ziemlich konstruiert ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Sonntag 3. Dezember 2006, 12:19

rolgal_reloaded hat geschrieben:Wenn man damit im Interpreter rumspielt bekommt man aber folgendes:

Code: Alles auswählen

>>> d = {"Italien":"Rom","Spanien":"Madrid","Belgien":"Brüssel","Frankreich":"Paris"}
>>> d.items()
[('Spanien', 'Madrid'), ('Italien', 'Rom'), ('Frankreich', 'Paris'), ('Belgien', 'Br\xfcssel')]
>>> d.keys()
['Spanien', 'Italien', 'Frankreich', 'Belgien']
>>> d.iterkeys()
<dictionary-keyiterator object at 0x01553D60>
Ich meine: wenn ich mit iterkeys() in deinem Code der Klasse MyDict dasselbe bekomme wie mit meiner Listcomprehension

Code: Alles auswählen

    def keys(self):
        return sorted([key for key in self]) 
, dann müsste ich doch in der oben gezeigten interaktiven Sitzung auch mehr rausbekommen als einen schönen Gruß übern Interpreter
Die Liste oder der Iterator werden als Argument an `sorted()` übergeben. Wichtig ist was *diese* Funktion zurückgibt. Nämlich eine sortierte Liste mit den Elementen des "iterable", das als Argument übergeben wurde.

Code: Alles auswählen

In [1]: d = {"Italien":"Rom","Spanien":"Madrid","Belgien":"Brüssel","Frankreich":"Paris"}

In [2]: d.iterkeys()
Out[2]: <dictionary-keyiterator object at 0xb7951300>

In [3]: sorted(d.iterkeys())
Out[3]: ['Belgien', 'Frankreich', 'Italien', 'Spanien']
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Sonntag 3. Dezember 2006, 14:01

@Leonidas, @Blackjack,

wunderbar eure Antworten, leuchtet mir alles ein. :D

LG

rolgal_reloaded
Antworten