Grazie ma la gestione delle stringhe in python mi era già chiara. Sapevo per esempio che A < B < C. Quello che io intendevo era perché l'espressione con il > ritorna 1 e quella con il < invece -1. E dato che esegue 1<2 ritorna vero
Il tuo codice non esegue 1<2, visto che compara i valori dell'attributo "valore" dei due oggetti, ovvero "Asso" e "Due".
Quello che succede nel tuo codice è che lui esegue "Asso" < "Due" e, per quello che ti ho spiegato prima, il risultato è True, perchè "Asso" è lessicograficamente inferiore a "Due". Quel codice non ha alcuna idea che "Asso" corrisponde ad 1 e "Due" a 2.
Come scritto nello scorso commento, se vuoi che vengano comparati i valori numerici, ti conviene dare alla classe Carta due attributi: uno numerico per il valore e una stringa per il nome della carta. Quindi nel metodo __cmp__ compari i valori numerici.
Se poi la domanda invece è come funziona il metodo __cmp__, quella è un'altra convenzione di python. Quando vengono utilizzati gli operatori di comparazione, infatti, l'interprete chiama la funzione __cmp__ per determinare se il primo argomento è maggiore del secondo (la funzione deve ritornare 1), se sono uguali (la funzione deve tornare 0), o se il secondo è maggiore del primo (la funzione deve ritornare -1). Sovrascrivendo la funzione in una classe si può implementare un metodo di comparazione di due oggetti di quella classe (o derivate) a piacere dello sviluppatore.