我有一个遗留代码调用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
RawIOBase.__init__不接受任何参数,这就是你的错误所在。
Your TiffFile
实现也继承了file这不是一个类,而是一个构造函数,所以你的 Python 2 实现是不惯用的,有人甚至可能声称它是错误的。你应该使用open
代替file
,并且在类上下文中您应该使用io
输入和输出的模块类。
您可以使用open返回一个文件对象以供您使用file
在Python 2.7中或者你可以使用io.FileIO
同时Python 2 and Python 3用于访问文件流,就像您所做的那样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
将以二进制模式打开文件以供只读。所附的+
将文件设置为以读写模式打开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)