将python2“file”类的子类移植到python3

ruarlubt  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(384)

我有一个调用 class TiffFile(file) . Python3叫它什么?
我尝试在python2中替换以下内容:

class TiffFile(file):
    def __init__(self, path):
        file.__init__(self, path, 'r+b')

通过python3中的以下内容:

class TiffFile(RawIOBase):
    def __init__(self, path):
        super(TiffFile, self).__init__(path, 'r+b')

但现在我越来越紧张了 TypeError: object.__init__() takes no parameters

p5fdfcr1

p5fdfcr11#

RawIOBase.__init__ 不接受任何参数,这就是错误所在。
你的 TiffFile 实现也继承了 file 它不是一个类,而是一个构造函数,所以你的Python2实现是非惯用的,甚至有人会说它是错误的。你应该使用 open 而不是 file ,并且在类上下文中,应该使用 io 用于输入和输出的模块类。
你可以用 open 返回要使用的文件对象 file 在Python2.7中,也可以使用 io.FileIO 在Python2和Python3中都可以访问文件流,就像您使用 open .
因此,您的实现更像:

import io

class TiffFile(io.FileIO):
    def __init__(self, name, mode='r+b', *args,**kwargs):
        super(TiffFile, self).__init__(name, mode, *args,**kwargs)

这应该适用于所有当前支持的python版本,并允许您使用与旧实现相同的接口,同时更加正确和可移植。
你真的在用吗 r+b 用于在windows上以读写二进制模式打开文件?你可能应该使用 rb 模式,如果您没有写入文件,而只是读取tiff数据。 rb 将以二进制模式打开该文件以进行只读。附加的 + 将文件设置为以读写模式打开。

相关问题