我正在创建一个Python类,它应该通过Python Docker SDK管理Docker服务。
我应该在我的类的构造函数中启动 Docker 容器,还是创建一个必须在之后手动调用的方法start()
更好(并且在构造函数中只初始化类属性)?
对于C++来说,有一个RAII习惯用法,其中连接将在构造函数中建立,对于Java,我一直听说构造函数应该是轻量级的,不做任何计算或其他"重"的东西。
在 Python 中最好的方法是什么?
首先,我想在这里强调使用不正确的术语。构造函数和初始值设定项在 Python 中是两个不同的东西。构造函数是使用__new__
方法在后台实现的,它控制类对象的创建。初始值设定项使用__init__
方法,并在创建对象后控制对象的初始化。
在几乎所有情况下,构造函数都是使用基类的__new__
实现隐式调用的,您很少需要重写它,但是对于初始值设定项,情况恰恰相反,因为您希望在创建对象初始化后自定义对象初始化。
现在来谈谈您的问题,这取决于您要如何控制应用程序,如果您在类的初始化器中启动容器,即在__init__
内部,我认为没有任何问题。这样做的目的是,一旦创建对象,它也会启动 docker 容器。
但是,如果您想更明确地了解它并希望为start
和stop
提供单独的实例方法,即使这也不是问题,只是现在您需要在创建对象后显式调用start
方法。