Нет, вы не можете, нет никаких специальных методов, которые вы можете реализовать, чтобы ваш класс Python поддерживал буферный протокол.
Да, io.RawIOBase.write()
и io.BufferedIOBase.write()
методы документируют, что они принимают bytes
-подобный объект , но буферный протокол должен был сделать чем-то bytes
-подобным только протокол уровня C .Существует открытая проблема Python для добавления хитов Python , но никакого прогресса в этом направлении достигнуто не было.
Специальный метод __bytes__
вызывается только в том случае, если вы передали объект в вызываемую bytes()
;.write()
не делает этого.
Таким образом, при записи в файл принимаются только фактические bytes
-подобные объекты, все остальное должно быть сначала преобразовано в такой объект.Я бы придерживался:
with open('Test.txt', 'wb') as f:
f.write(bytes(mine))
, который вызовет метод MyClass.__bytes__()
, при условии, что он определен, или предоставит метод в вашем классе, который заставит его записать себя в объект файла:
with open('Test.txt', 'wb') as f:
mine.dump(f)