擅长:python、mysql、java
<blockquote>
<p>I don't understand why running the method without the parenthesis would not cause any error (actually the method is not run) whereas with the parenthesis (and not passing the neccesary variable through an error)</p>
</blockquote>
<p>当您通过<code>object.method</code>引用方法(对象上下文中的函数,<code>self</code>被隐式传递)时,将返回method对象。但要真正执行这个函数,你需要调用它,即使用括号</p>
<p>有趣的是,将返回的method对象保存为一个变量并调用它,您将看到它们引用同一个对象时执行的操作是相同的</p>
<p>现在,调用<code>emp1.increasesalary()</code>时,没有传递所需的参数<code>percentage</code>,从而导致错误。再次注意,<code>self</code>(对象本身)是隐式传递的</p>
<blockquote>
<p>how can I avoid such kind of errors? i.e. if the user passes nothing assume vale zero</p>
</blockquote>
<p>使参数成为默认值为0的关键字参数:</p>
<pre><code>def increasesalary(self, percentage=0):
self.salary = self.salary * (1 + percentage / 100)
</code></pre>