首页 > 解决方案 > 是否可以修改`__init__`中的方法?

问题描述

我想创建一个简单的日志程序。当我尝试插入控制台输出功能时出现问题。

我最初的代码是这样的:

import datetime

class LogOutput:
    def __init__(self, debugMode=False):
        self.isDebug = debugMode
        self.f = open(
                    'logs/log-{date:%Y-%m-%d_%H.%M.%S}.txt'
                    .format( date=datetime.datetime.now()),"w+"
                    )
        self.f.write("            Test Loggings                \n")
        self.f.write("    Date: {date:%d-%m-%Y_%H:%M:%S}       \n".format( date=datetime.datetime.now()))
        self.f.write("-----------------------------------------\n\n\n")

    @classmethod
    def debugModeConsole(cls):
        return cls(True)
    @classmethod
    def start(cls):
        "Set debugMode to False"
        return cls(False)

    def Write(self, output):
        self.f.write(output)
        if(self.isDebug):
            print(output)

我意识到我使用if(self.isDebug):的这部分效率很低,并且想知道我是否只能这样做一次,即在类初始化期间,如下所示:

def __init__(self, debugMode=false):
    self.isDebug = debugMode
    ...
    if(self.isDebug):
        self.Write()= (self, output) => {
            self.f.write(output)
            print(output)
        }

标签: pythonoptimization

解决方案


简短的回答:你可以,有点。

长答案:

如果我在你的鞋子里,我会做类似的事情

class LogOutput:
    def __init__(self, debugMode=False):
        self.write = self.write_debug if debugMode else self.write_no_debug
    def write_no_debug(self, output):
        self.f.write(output)
    def write_debug(self, output):
        self.f.write(output)
        print(output)

但不是在进行任何分析之前,因为也许您的解决方案并不像您想象的那么低效。


推荐阅读