将继承str和__new__的类从py 2迁移到2/3

时间:2018-05-22 22:15:30

标签: python-3.x python-2.7 inheritance

我目前正在尝试将一些python 2代码迁移到兼容python 2/3的代码,并且遇到了这个特殊类的问题:

class FileID(str):
    def __new__(cls, fileid, *args):
        return super(FileID, cls).__new__(cls, fileid)

    def __init__(self, fileid, size):
        super(FileID, self).__init__(fileid)
        self.size = size

x = FileID('a', 1)

print(x) # prints: a
print(x.size) # prints: 1

在python 2.7中,这很好用。

要移植,我一直在使用from builtins import super

对于python 3.6,我删除了冗余的内部超级参数,但似乎对__new__方法和传入int参数都不了解(说它必须是str)。

有没有办法将此类创建为py2 / 3(继承str,并且可以接受类型为int的参数)?

提前致谢!

1 个答案:

答案 0 :(得分:1)

class FileID(str):
    def __new__(cls, fileid, *args):
        return super().__new__(cls, fileid)
    def __init__(self, fileid, size):
        super().__init__()
        self.size = size
x = FileID('a', 1)
print(x) # prints: a
print(x.size) # prints: 1

在python 2和3中都适用于我