gpt4 book ai didi

python-3.x - 将python2 'file'类的一个子类移植到python3

转载 作者:行者123 更新时间:2023-12-03 23:17:28 26 4
gpt4 key购买 nike

我有一个旧代码调用 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 这不是一个类,而是一个构造函数,所以你的 Python 2 实现是非惯用的,有人甚至可以声称它是错误的。您应该使用 open而不是 file , 在类上下文中你应该使用 io用于输入和输出的模块类。

您可以使用 open 像使用 file 一样返回文件对象以供使用在 Python 2.7 中,或者您可以使用 io.FileIO在这两个 Python 2Python 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 版本,并允许您使用与旧实现相同的接口(interface),同时更正确和可移植。

你真的在使用 r+b在 Windows 上以读写二进制模式打开文件?您可能应该使用 rb模式,如果您不写入文件,而只是读取 TIFF 数据。 rb将以二进制模式打开文件以进行只读。附加的 +将文件设置为以读写模式打开。

关于python-3.x - 将python2 'file'类的一个子类移植到python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com