2017-09-15 95 views
0

这里是例子,这里是从内置的Python记录代码剪断:重写_open方法

class StreamHandler(Handler) 
    def __init__(self, stream=None): 
     Handler.__init__(self) 
     self.stream = stream 

class FileHandler(StreamHandler): 
    def __init__(self, filename, mode='a'): 
     StreamHandler.__init__(self, self._open()) 

    def _open(self): 
     stream = open(self.name, self.mode) 
     return stream 

class MyFileHandler(FileHandler) 
    def _open(self): 
     stream = open(self.name, self.mode, 0) 
     return stream 

我试图重写_open功能。所以我做了以上,并没有工作。如何在上述情况下覆盖_open

回答

0

我不知道你从tbh获得这些类的位置。在logging模块中使用的Filehandlerlogging.__init____init__中定义,它在您的_open调用中设置了几个属性。具体为self.baseFilename,即要使用的文件的名称。

你的课上_open正在实施的唯一的事情,应该是这样的:

from logging import FileHandler 

class MyFileHandler(FileHandler): 
    def _open(self): 
     stream = open(self.baseFilename, self.mode, 0) 

因为你设置缓冲到0你应该提供一个模式,以二进制打开它。

0

谢谢。 很抱歉,代码是snippet。我从记录模块导入。

class FileHandler(StreamHandler): 
    def __init__(self, filename, mode='a'): 
     StreamHandler.__init__(self, self._open()) <-- 

我想在此改变流(上面第二个参数)传递INIT