Podczas tworzenia podklas typów wbudowanych zauważyłem dość istotną różnicę między Python 2 i Python 3 w typach zwracanych metod typów wbudowanych. Następujący kod ilustruje to dla zestawów:Typy wbudowanych podklas w Pythonie 2 i Pythonie 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)))
Pythona 2, wszystkie wartości powrotne typu MySet
. W języku Python 3 typy zwrotów to set
. Nie mogłem znaleźć żadnej dokumentacji na temat tego, jaki wynik powinien być, ani żadnej dokumentacji na temat zmiany w Pythonie 3.
W każdym razie, na czym mi naprawdę zależy, to: czy istnieje prosty sposób w Pythonie 3, aby uzyskać zachowanie widziane w Pythonie 2, bez ponownego definiowania każdej metody wbudowanych typów?
W Pythonie 2 tylko typ 's1' nie ma znaczenia rodzaj' s2 '. – agf
Jest to podobne do tego, że 'False + False' ma wartość' 0', a nie 'False' (' bool' jest podklasą 'int', nawiasem mówiąc). –