擅长:python、mysql、java
<p>我更喜欢在构造函数中设置所有实例变量,而不是使用像<code>get_info()</code>这样的函数来将类置于有效状态。</p>
<p>对于只通过调用方法(如<code>get_info()</code>)来实例化的公共实例变量,可以创建一个要使用的类。</p>
<p>如果您担心某些配置值并不总是需要的,而且计算成本很高(我猜这就是为什么您有get_info(),允许延迟执行),那么我会考虑将该配置子集重构为第二个类,或者引入<a href="http://docs.python.org/library/functions.html#property" rel="noreferrer">properties</a>或返回值的函数。</p>
<p>使用properties或get-style函数,可以鼓励类的使用者通过定义的接口并改进封装<sup>1</sup>。</p>
<p>一旦对实例变量进行了封装,您就可以选择做一些事情,而不仅仅是抛出一个<code>NameError</code>异常——您可以自己调用<code>get_info()</code>,或者抛出一个自定义异常。</p>
<hr/>
<p><sup>1.</sup>您不能用Python提供100%的封装,因为由前导双下划线表示的私有实例变量仅按约定是私有的</p>