我正在尝试编写一个从mmap继承的类,如下所示:
from mmap import mmap
class SBFMap(mmap):
def __init__(self, filename):
f=open(filename, 'rb')
fn = f.fileno()
super().__init__(fn, 0, access = mmap.ACCESS_READ)
您可以猜到,我的类的部分功能是将文件打开/关闭隐藏在我的初始化中。然后我尝试得到一个SBFMap对象,如下所示:
from SBFMap import SBFMap
filename = "name\of\file"
mymap = SBFMap(filename)
我得到这个错误:
File "SBFReader.py", line 22 in <module> main()
File "SBFReader.py", line 7, in main mymap=SBFMap(filename)
TypeError: an integer is required (got type str)
Press any key to continue . . .
看起来python并没有调用SBFMap的init,而是让我在准备好的时候调用mmap的init,而是尝试调用mmap的init。我该怎么解决这个问题?你知道吗
因为在对象创建中有两种不同的特殊方法:
__new__
创建对象和__init__
配置对象。你知道吗通常,Python可变类使用默认的
__new__
,该类结束调用object.__new__
来创建新的Python对象并接受任何参数。你知道吗但是有些类(尤其是不可变的类)确实重写了
__new__
。在这种情况下,您必须在类中实现一个,并从父类中调用具有预期签名的。你知道吗一旦构建了对象,Python最终将调用实际对象的
__init__
方法。你知道吗在这里你应该做:
但是要注意,如果父类希望调用它的
__init__
方法,那么您仍然需要在类中实现一个调用父类__init__
并带有预期签名的方法。你知道吗相关问题 更多 >
编程相关推荐