以优雅的方式初始化许多对象

时间:2016-09-14 23:05:59

标签: python python-3.x

我正在寻找一种优雅的方式来初始化许多物体。

让我们说我有一个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模块中初始化所有这些类。你觉得怎么样?

1 个答案:

答案 0 :(得分:3)

我不会创建一个类并将其作为基础,看起来有点过分,过于笨重的方法

相反,您可以创建一个辅助帮助函数,该函数需要mvn dependency:tree -Dverbose -Dincludes=org.apache.jena:jena-coreself。来自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中定义,或者作为类中的方法定义。