Python 何时将类的实例作为self传递给方法?

Python 何时将类的实例作为self传递给方法?,python,object,nltk,Python,Object,Nltk,我刚开始学习PyCharm和NLTK上的Python,遇到了以下问题。我有以下代码。文本来源是一个词性标注的语料库JJ'代表形容词: 主脚本: 类形容词对象。形容词: 所以我的问题是: 以下代码行要求我将包含类实例的变量传递到class.method调用中,如下所示: thewordinQuestion = p.getAdjAntPairs(p, lemmatized_adjective, each_antonym) 如果我不这样做[即调用p.getAdjAntPairslemmatized_

我刚开始学习PyCharm和NLTK上的Python,遇到了以下问题。我有以下代码。文本来源是一个词性标注的语料库JJ'代表形容词:

主脚本:

类形容词对象。形容词:

所以我的问题是:

以下代码行要求我将包含类实例的变量传递到class.method调用中,如下所示:

thewordinQuestion = p.getAdjAntPairs(p, lemmatized_adjective, each_antonym)
如果我不这样做[即调用p.getAdjAntPairslemmatized_形容词,每个_反义词],我会得到以下错误:

TypeError: getAdjAntPairs() missing 1 required positional argument: 'servedantonym'
为什么呢?调用不应该通过读取p.getAdhAntPairs命令来知道我要传入哪个实例吗


任何建议都将不胜感激。

此问题似乎出现在您的主脚本中:

p = adjectiveobject.Adjective
应该是

p = adjectiveobject.Adjective(<whatever tagged input should be>)

注意后面的括号。您已经保存了对类本身的引用,而我认为您需要的是类的实例。

正如其他人已经说过的,您需要实例化该类,但是,在下一行中还有另一个bug TypeError等待发出。实例方法将self作为参数,而不是参数。类的引用由python自动传递,因此不需要在方法getAdjAntPairs中将p作为参数传递

用两个参数调用这样的方法是正确的

何时将类的实例作为self传递给方法

对于python的典型用法,您永远不需要将显式self传递给方法

一旦有了一个类实例,所有方法调用都将自动接收self作为第一个参数

foo = Adjective(some_input)  # create instance of the class "Adjective"
foo.some_method()  # "self" is passed implicitly
如果出于某种原因从类本身而不是在类实例上调用类方法,则必须传递self

这在功能上与前面的示例相同:

foo = Adjective(some_input)  
Adjective.some_method(foo)  # you must pass "self" 
如果您收到一条错误消息,抱怨缺少参数,可能是因为您忘记创建实例

baz = Adjective.some_method()  # Error: expected "self"
baz = Adjective().some_method()  # What you meant to do, no "self" needed.

您缺少上一行中的括号p=approcate object.approcate。现在,p是一个类object,你需要做p=apprizer object.apprizer。括号很重要,因为这将正确创建实例。实际上,您只引用class.THXVM CXW和其他发表评论的人。我觉得有点尴尬,因为回答如此直截了当,但我就是没看到!让我对这个答案更加感激。谢谢大家!@别担心很高兴你回来跑步了!
foo = Adjective(some_input)  # create instance of the class "Adjective"
foo.some_method()  # "self" is passed implicitly
foo = Adjective(some_input)  
Adjective.some_method(foo)  # you must pass "self" 
baz = Adjective.some_method()  # Error: expected "self"
baz = Adjective().some_method()  # What you meant to do, no "self" needed.