软件中的有效 class 实例化
Effective class instanciation in software
我编写了一个 coloured_output
模块,其中包含一个名为 ColouredMsg
的 class。
要使用它,我只需要创建一个 ColouredMsg
:
的实例
from coloured_output import ColouredMsg
cm = ColouredMsg()
然后这样使用:
warning_msg = cm.warn(*parameters)
error_msg = cm.error(*parameters)
问题是我打算在软件中将此 class 用于控制台日志:
cm = ColouredMsg()
print cm.warn(*parameters)
正如人们可能猜到的那样,几乎在每个模块中都会经常进行此调用。所以在这一点上,我想知道哪种做法最好。要么我坚持这种方式,我将不得不导入模块 coloured_output
并在每个模块的开头声明一个 ColouredMsg
的实例,或者我可以在 coloured_output
模块,像这样:
def warn(*parameters):
cm = ColouredMsg()
return cm.warn(*parameters)
然后在我的软件中:
import coloured_output as co
# ...
co.warn(*parameters)
但在这里,每次我想打印一条彩色消息时,我都必须创建一个 ColouredMsg
的实例,这会很重,应该避免。
这让我有了第三种选择,我可以在我的 coloured_output
模块中创建一个 ColouredMsg
的通用实例,它看起来像:
class ColouredMsg():
def warn(*parameters):
message = do_whatever_is_needed(*parameters)
return message
cm = ColouredMsg()
def warn(*parameters):
return cm.warn(*parameters)
所以我有两个选择:要么在我的每个软件模块中声明一个通用实例,要么在 coloured_output
模块中声明一个通用实例。或者其他我没有想过的东西。
我会接受任何建议。
Daniel 在评论中的建议很好。
但是如果你真的想自己做这个,我建议在模块中使用一个隐藏的实例,而不是在每个函数调用中创建一个新的临时实例。 "hidden instance" 方法在标准库中使用,例如,这就是 random
模块为标准随机函数所做的。
我编写了一个 coloured_output
模块,其中包含一个名为 ColouredMsg
的 class。
要使用它,我只需要创建一个 ColouredMsg
:
from coloured_output import ColouredMsg
cm = ColouredMsg()
然后这样使用:
warning_msg = cm.warn(*parameters)
error_msg = cm.error(*parameters)
问题是我打算在软件中将此 class 用于控制台日志:
cm = ColouredMsg()
print cm.warn(*parameters)
正如人们可能猜到的那样,几乎在每个模块中都会经常进行此调用。所以在这一点上,我想知道哪种做法最好。要么我坚持这种方式,我将不得不导入模块 coloured_output
并在每个模块的开头声明一个 ColouredMsg
的实例,或者我可以在 coloured_output
模块,像这样:
def warn(*parameters):
cm = ColouredMsg()
return cm.warn(*parameters)
然后在我的软件中:
import coloured_output as co
# ...
co.warn(*parameters)
但在这里,每次我想打印一条彩色消息时,我都必须创建一个 ColouredMsg
的实例,这会很重,应该避免。
这让我有了第三种选择,我可以在我的 coloured_output
模块中创建一个 ColouredMsg
的通用实例,它看起来像:
class ColouredMsg():
def warn(*parameters):
message = do_whatever_is_needed(*parameters)
return message
cm = ColouredMsg()
def warn(*parameters):
return cm.warn(*parameters)
所以我有两个选择:要么在我的每个软件模块中声明一个通用实例,要么在 coloured_output
模块中声明一个通用实例。或者其他我没有想过的东西。
我会接受任何建议。
Daniel 在评论中的建议很好。
但是如果你真的想自己做这个,我建议在模块中使用一个隐藏的实例,而不是在每个函数调用中创建一个新的临时实例。 "hidden instance" 方法在标准库中使用,例如,这就是 random
模块为标准随机函数所做的。