При подклассификации встроенных типов я заметил довольно важное различие между Python 2 и 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)))
С Python 2 все возвращаемые значения имеют тип MySet
. С Python 3 типы возврата set
. Я не мог найти документацию о том, каким должен быть результат, и никакой документации об изменении в Python 3.
Во всяком случае, я действительно забочусь об этом: есть ли простой способ в Python 3 получить поведение, наблюдаемое на Python 2, без переопределения каждого метода встроенных типов?