软件

时间:2016-01-11 10:11:30

标签: python class logging instantiation

我编写了一个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) 模块中声明一个通用实例。或者其他我没想过的东西。

我会接受任何建议。

1 个答案:

答案 0 :(得分:2)

丹尼尔在评论中提出的建议很好。

但是如果你真的想自己想要这样做,我建议在模块中使用隐藏实例,而不是在每个函数调用中创建一个新的临时实例。标准库中使用了“隐藏实例”方法,例如,random模块对标准随机函数的作用。