Quando si sottoclasse i tipi di builtin, ho notato una differenza piuttosto importante tra Python 2 e Python 3 nel tipo restituito dei metodi dei tipi built-in. Il codice seguente illustra questo per gli insiemi:Tipi di sottoclassi incorporati in Python 2 e Python 3
class MySet(set):
pass
s1 = MySet([1, 2, 3, 4, 5])
s2 = MySet([1, 2, 3, 6, 7])
print(type(s1.union(s2)))
print(type(s1.intersection(s2)))
print(type(s1.difference(s2)))
Con Python 2, tutti i valori di ritorno sono di tipo MySet
. Con Python 3, i tipi di ritorno sono set
. Non sono riuscito a trovare alcuna documentazione sul cambiamento in Python 3.
In ogni caso, quello che mi interessa davvero è questo: c'è un modo semplice in Python 3 per ottenere il comportamento visto in Python 2, senza ridefinire ogni singolo metodo dei tipi built-in?
su Python 2 solo il tipo di 's1' è rilevante non è il tipo di' s2 '. – agf
È simile al modo in cui 'False + False' è' 0', non 'False' (' bool' è una sottoclasse di 'int', comunque). –