我编写了一个coloured_output
模块,其中包含一个名为ColouredMsg
的类。
要使用它,我只需要创建ColouredMsg
的实例:
from coloured_output import ColouredMsg
cm = ColouredMsg()
然后以这种方式使用它:
warning_msg = cm.warn(*parameters)
error_msg = cm.error(*parameters)
问题是我打算在软件中使用此类作为控制台日志:
cm = ColouredMsg()
print cm.warn(*parameters)
正如人们可能猜到的那样,几乎每个模块都会经常进行此调用。所以在这一点上,我想知道哪种做法最好。要么我坚持这种方式,我必须导入模块coloured_output
并在每个模块的开头声明ColouredMsg
的实例,或者我可以在{{1}中创建一般函数模块,像这样:
coloured_output
然后在我的软件中:
def warn(*parameters):
cm = ColouredMsg()
return cm.warn(*parameters)
但是,每次我想要打印彩色信息时,我都必须创建一个import coloured_output as co
# ...
co.warn(*parameters)
的实例,这个信息很重,应该可以避免。
这给了我第三个选择,我可以在ColouredMsg
模块中创建ColouredMsg
的一般实例,如下所示:
coloured_output
所以我有两个选择:在我的每个软件模块中声明一个通用实例,或者在class ColouredMsg():
def warn(*parameters):
message = do_whatever_is_needed(*parameters)
return message
cm = ColouredMsg()
def warn(*parameters):
return cm.warn(*parameters)
模块中声明一个通用实例。或者其他我没想过的东西。
我会接受任何建议。
答案 0 :(得分:2)
丹尼尔在评论中提出的建议很好。
但是如果你真的想自己想要这样做,我建议在模块中使用隐藏实例,而不是在每个函数调用中创建一个新的临时实例。标准库中使用了“隐藏实例”方法,例如,random
模块对标准随机函数的作用。