我正在寻找一种优雅的方式来初始化许多对象。
假设我有一个 Utils
模块,它有一个到 SVN、Git、Make 和其他东西的接口(interface)。
目前,我是这样做的:
from Utils.Config import Config, Properties
from Utils.Utils import PrettyPrint, SVN, Make, Bash, Git
class Build(object):
def __init__(self):
self.config = Config()
self.make = Make()
self.env = Properties()
self.svn = SVN()
self.git = Git()
self.bash = Bash()
self.pretty_print = PrettyPrint()
而且……好吧,看起来不太好。
有没有办法以更优雅的方式做到这一点?我想这可能是一个设计问题,但我不知道如何解决这个问题。
我正在考虑创建
Base class
,它将在 Utils
模块中初始化所有这些类。你怎么看? 最佳答案
我不会创建一个类并将其作为基础,这似乎有点矫枉过正,方法过于庞大。
相反,您可以创建一个辅助函数,帮助函数,它带有 self
和 setattr
。来自 collections
的几个对象的示例如下所示:
from collections import UserString, deque, UserDict
def construct(instance, classes = (UserString, deque, UserDict)):
for c in classes:
setattr(instance, c.__name__.lower(), c([]))
您的情况也很适合,因为您的对象不需要一些初始值,因此您可以以相同的方式概括和处理它们:-)。
现在您的示例类可以使用
construct()
中的默认值调用 __init__
并完成:class Foo:
def __init__(self):
construct(self)
construct
函数当然可以根据需要在 Utils
中定义,或者作为类中的方法。关于python - 以优雅的方式初始化多个对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39500940/