我正在寻找一种优雅的方式来初始化许多物体。
让我们说我有一个Utils
模块,它有一个SVN,Git,Make和其他东西的接口。
目前,我这样做:
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
模块中初始化所有这些类。你觉得怎么样?
答案 0 :(得分:3)
我不会创建一个类并将其作为基础,看起来有点过分,过于笨重的方法。
相反,您可以创建一个辅助帮助函数,该函数需要mvn dependency:tree -Dverbose -Dincludes=org.apache.jena:jena-core
和self
。来自collections
的几个对象的示例如下所示:
setattr
你的情况也很合适,因为你的对象没有一些初始值,所以你可以用相同的方式概括和处理它们: - )。
现在,您的示例课程可以使用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
中定义,或者作为类中的方法定义。