@Xfd7887a: Naja zwei Fächer kann man mit `cmp()` vergleichen. Mache ich da ja. Was da konkret passiert hängt davon ab wie die beteiligten Objekte ``<`` oder ``>`` und ``==`` implementieren. Da hier Zeichenketten zu erwarten sind, ist das Verhalten also von diesen Operatoren auf Zeichenketten abhängig. ``==`` sollte klar sein, und ``<``/``>`` wird lexikographisch gesehen.
Um das mit den Hashwerten wirklich zu verstehen, muss man sich klar machen wie die Datenstruktur „hashtable” funktioniert. Ansonsten reicht es zu beachten dass wenn zwei Objekte mit ``==`` als gleich angesehen werden, dann müssen sie auch bei `hash()` das selbe Ergebnis liefern. Und das `hash()`-Ergebnis von einem Objekt sollte immer gleich sein. Praktisch folgt daraus das alles was zum Vergleich verwendet wird auch für die Berechnung des Hashwertes herangezogen werden muss, und dass keiner dieser Werte verändert werden sollte. Sonst kann man Exemplare von diesen Objekten nicht in Datenstrukturen verwenden die sich auf diese Invariante verlassen, also zum Beispiel als Schlüssel in Wörterbüchern (`dict`) oder als Elemente in Mengen (`set`, `frozenset`).
`classmethod()`\s sind Methoden auf Klassen die als erstes Argument die Klasse übergeben bekommen auf der sie aufgerufen werden. Und das ist dann auch das `cls`-Argument.
Wenn etwas nicht im Buch steht, dann ist aber ziemlich sicher in der Python-Dokumentation beschrieben.