我有一个调用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
答案 0 :(得分:1)
RawIOBase.__init__
不接受任何参数,这就是错误所在。
您的TiffFile
实现还继承了file
,它不是一个类,而是一个构造函数,因此您的Python 2实现是非惯用的,有人甚至可以声称它是错误的。您应该使用open
而不是file
,并且在类上下文中,您应该使用io
模块类进行输入和输出。
您可以使用open
返回文件对象,以便在Python 2.7中使用file
,或者在Python 2和{{3}中使用io.FileIO
用于访问文件流,就像使用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上以读写二进制模式打开文件?如果您没有写入文件,而是只读取TIFF数据,则应该使用rb
模式。 rb
将以二进制模式打开文件以供阅读。附加的+
将文件设置为以读写模式打开。