擅长:python、mysql、java
<p>你叫了两次。在结尾的<code>print()</code>中一次,在对<code>m_est_maj</code>的调用中一次。在</p>
<p>数学运算是一个相当便宜的运算。通过缓存结果,您可能不会获得有意义的性能提升。但如果你愿意的话,你可以这么做。您可以从<code>__init__</code>调用<code>m_in_maj</code>,并将结果保存到实例属性中,并引用该属性而不是函数调用。在</p>
<p>或者您可以让函数检查instance属性是否已经定义,在第一次调用时进行计算,然后在后续调用时返回。在</p>
<p>这是我看到的一种非常常见的一般方法:</p>
<pre><code>class DobleTSim():
def __init__(self, bf, hw, tf, tw):
self.bf = bf
self.hw = hw
self.tf = tf
self.tw = tw
def m_in_maj(self):
if not hasattr( self, '_m_in_maj_result'):
print('foo')
self._m_in_maj_result = \
2 * (self.bf * self.tf * (self.tf / 2 + self.hw / 2))
return self._m_in_maj_result
def m_est_maj(self):
return self.m_in_maj() / ((self.hw + 2 * self.tf) / 2)
A = DobleTSim(200, 500, 12, 12)
print(A.m_in_maj(), A.m_est_maj())
</code></pre>
<p>基于<a href="https://stackoverflow.com/questions/610883/how-to-know-if-an-object-has-an-attribute-in-python/610923#610923">How to know if an object has an attribute in Python</a>,这样做可能更像Python:</p>
^{pr2}$