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