我目前正在尝试将一些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的参数)?
提前致谢!
答案 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中都适用于我