擅长:python、mysql、java
<p>这里有两个问题,一个是机械问题,一个是概念问题。我先处理后者。在</p>
<p>类的全部意义在于,它的实例代表世界模型中的某种对象。例如,一个“句子”是一个对象,所以有一个名为<code>Sentence</code>的类是有意义的,但是“解析器”不是一个对象,所以<code>Parsers</code>可能是一个混乱的类。从抽象的角度来看,类通常有某种状态,封装在它的方法所处理的数据成员中。在</p>
<p>这里真正拥有的是一个解析器函数,它返回一个<code>Sentence</code>对象(或引发一个<code>ParserError</code>)。这个函数可以是<code>Sentence</code>的方法,也可以是一个自由函数;如果模型中存在这样一个对象的任何原因,那么它也可以是<code>Parser</code>类的方法,但似乎没有理由。在</p>
<p>如果您只是想封装所有这些helper函数,这样它们就不会丢弃全局名称空间(这本身是个好主意),那么您不需要滥用类来实现这一点。{{cd7>把它们放在模块中。在</p>
<p>现在,讨论机械问题:如果类中有一个方法,通常只通过点语法来调用它:<code>someObject.methodName(params)</code>。当一个方法调用同一对象的另一个方法时,您可以使用特殊的<code>self</code>参数(已正确地将其列为每个方法的第一个参数)来执行此操作。所以:</p>
<pre><code>verb = self.parse_verb(word_list)
obj = self.parse_object(word_list)
</code></pre>
<p>…等等。在</p>
<p>不是每种语言都需要这样的显式<code>self</code>。例如,在C++或相关语言(java,C++等)中,一种方法可以调用另一种方法而不指定目标,它隐含地假定目标是^ {CD12}}(C++等价的^ {CD10}})。在</p>