Предположим, что я хочу расширить встроенную абстракцию файла с помощью дополнительных операций в open
и close
. В Python 2.7 это работает:
class ExtFile(file):
def __init__(self, *args):
file.__init__(self, *args)
# extra stuff here
def close(self):
file.close(self)
# extra stuff here
Теперь я ищу обновление программы до Python 3, в которой open
- это функция factory, которая может возвращать экземпляр любого из нескольких разных классов из модуля io
в зависимости от того, как он называется. Я мог бы в принципе подклассировать их всех, но это утомительно, и мне пришлось бы переопределить диспетчерство, которое open
делает. (В Python 3 различие между двоичными и текстовыми файлами имеет большее значение, чем в 2.x, и мне нужны оба.) Эти объекты будут переданы в библиотечный код, который может сделать что угодно с ними, поэтому идиома создания "файла-подобного" класса с утиным типом, который обертывает возвращаемое значение open
и пересылает необходимые методы, будет наиболее подробным.
Может ли кто-нибудь предложить подход 3.x, который включает в себя как можно больше дополнительного шаблона за пределами отображаемого кода 2.x?