python - 是否可以修改`__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)
}
解决方案
简短的回答:你可以,有点。
长答案:
如果我在你的鞋子里,我会做类似的事情
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)
但不是在进行任何分析之前,因为也许您的解决方案并不像您想象的那么低效。
推荐阅读
- c - 升级到 Python3 - C 数据类型
- google-cloud-platform - 将 Google AutoML API 与 API KEY 连接时出错
- angular - 注册调整大小的事件
- react-native - 子组件样式不起作用,但是当我将代码保存在子组件中时,然后在热重载样式后将其应用于子组件
- sql - 使用单独的 where 子句优化从同一个表查询连接 3 次
- python - 在 python 中编辑日期时间格式(使用 datetime.strptime)
- java - Java中的父子参数化构造函数
- matplotlib - matplotlib plot 在 streamlit 中的分辨率很差
- java - 从openj9堆驼峰获取字节数组数据
- java - 如何使用 XmlJsonParser 将信息从 java 保存和读取到 XML?