Python 自定义文件类。这是否可行?

Python 自定义文件类。这是否可行?,python,Python,目前我正在读写二进制文件,并且经常调用struct pack/unpack函数。而不是经常写这样的东西 struct.unpack(“3f”,myFile.read(12)) 我决定编写一个函数来节省自己的一些输入,因此在我的代码中上述语句的等价物是 myu解包(myFile,'3f') 其中我的解包定义为 struct.unpack(fmt,f.read(struct.calcsize(fmt)) 但我在想,如果我改写这样的东西呢 myFile.get_float(3) myFile.get_

目前我正在读写二进制文件,并且经常调用struct pack/unpack函数。而不是经常写这样的东西

struct.unpack(“3f”,myFile.read(12))

我决定编写一个函数来节省自己的一些输入,因此在我的代码中上述语句的等价物是

myu解包(myFile,'3f')

其中我的解包定义为

struct.unpack(fmt,f.read(struct.calcsize(fmt))

但我在想,如果我改写这样的东西呢

myFile.get_float(3) myFile.get_char(12) myFile.get_string(20) myFile.get_float(3) myFile.get_char(12) myFile.get_字符串(20) 我相信这会使它更容易阅读,特别是因为打包和解包的语法对于那些不熟悉它的人来说可能会让人望而生畏


这是否足以让我编写自己的类来继承File类,只是为了提供几个额外的方法?

您正在详细介绍的概念称为包装器,它实现了设计模式。包装器的存在是为了简化对父类的方法调用,这正是您想要做的。我不知道ee有一个问题。

不要子类化。而是编写:

class StructReader(object):
    def __init__(self, input_file):
        self.input_file = input_file

    def get_float(self, n):
        fmt = ...
        return struct.unpack(fmt, self.input_file.read(struct.calcsize(fmt)))

    ...

当您创建子类时,您必须担心名称空间冲突。组合避免了这个问题。

通常-是的,为什么不

但为什么要从文件继承?为什么不使用组合/中断依赖项

class BinaryReader(object):
    def __init__(self, source):
        self.source = source

    def read_char(l):
        fmt = str(l) + 'c'
        data = self.source.read(struct.calcsize(fmt))
        return struct.unpack(fmt, data)
    ....

哦,我不知道。那就容易多了!嗯,我对Facade模式不是很确定。总之,wrapper在你要包装的类上面放了一层抽象,使它更容易使用。