Создание подклассов встроенных типов в Python 2 и Python 3

При создании подклассов встроенных типов я заметил довольно важное различие между 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, без переопределения каждого метода встроенных типов?

22
задан Björn Pollex 2 November 2011 в 16:22
поделиться