将 python2 'file' class 的子 class 移植到 python3
Porting a sub-class of python2 'file' class to python3
我有一个遗留代码调用 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__
不接受任何参数,这就是你的错误所在。
你的 TiffFile
实现也继承了 file
这不是一个 class,而是一个构造函数,所以你的 Python 2 实现是非惯用的,有人甚至可以声称这是错误的。您应该使用 open
而不是 file
,并且在 class 上下文中您应该使用 io
模块 class 作为输入和输出。
您可以使用 open
to return a file object for use as you would use file
in Python 2.7 or you can use io.FileIO
in both 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 上以读写二进制模式打开文件吗?如果您不写入文件,而只是读取 TIFF 数据,您可能应该使用 rb
模式。 rb
将以二进制模式打开文件以供只读。附加的 +
设置文件以读写模式打开。
我有一个遗留代码调用 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__
不接受任何参数,这就是你的错误所在。
你的 TiffFile
实现也继承了 file
这不是一个 class,而是一个构造函数,所以你的 Python 2 实现是非惯用的,有人甚至可以声称这是错误的。您应该使用 open
而不是 file
,并且在 class 上下文中您应该使用 io
模块 class 作为输入和输出。
您可以使用 open
to return a file object for use as you would use file
in Python 2.7 or you can use io.FileIO
in both 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 上以读写二进制模式打开文件吗?如果您不写入文件,而只是读取 TIFF 数据,您可能应该使用 rb
模式。 rb
将以二进制模式打开文件以供只读。附加的 +
设置文件以读写模式打开。