【问题标题】:Overriding _open Method覆盖 _open 方法
【发布时间】:2017-09-15 15:34:19
【问题描述】:

这是示例,这是内置 python 日志记录的代码片段:

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

【问题讨论】:

    标签: python python-3.x logging


    【解决方案1】:

    我不知道你从 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,因此您应该提供一种以二进制形式打开它的模式。

    【讨论】:

      【解决方案2】:

      谢谢。 抱歉,代码是 sn-p。我正在从日志模块导入。

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

      我想覆盖传递给 init

      的流(第二个参数以上)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-21
        • 1970-01-01
        • 2016-03-06
        • 2018-03-27
        • 2014-05-27
        • 2014-01-04
        • 2021-11-11
        • 2010-11-16
        相关资源
        最近更新 更多