我有一个简单的应用程序,我希望能够添加以文本,句子和标记组织的文本。每个文本包含许多句子,每个句子包含许多标记。我的课程看起来像这样:
class Text:
sentences = []
def __init__(self, meta):
self.meta = meta
def getSentences(self):
return self.sentences
def addSentence(self, s):
self.sentences.append(s)
class Sentence:
tokens = []
def __init__(self):
pass
def getTokens(self):
return self.tokens
def addToken(self, t):
self.tokens.append(t)
class Token:
def __init__(self, word, pos):
self.word = word
self.pos = pos
def getWord(self):
return self.word
def getpos(self):
return self.pos
然后我创建了一个令牌,一个句子和一个这样的文本:
token = Token("a", "b")
sent = Sentence()
sent.addToken(token)
txt = Text("meta")
txt.addSentence(sent)
现在,当我想访问该令牌时,即第一个文本的第一个句子的第一个令牌时,我希望能够做到这样的事情:
print txt.getSentences[0].getTokens[0]
......根本不起作用。我可以像这样访问getSentences方法
print txt.getSentences
给了我这个
<bound method Text.getSentences of <txt.Text instance at 0x1006d5a70>>
答案 0 :(得分:2)
您的代码存在两个问题。
首先,您将sentences
和tokens
定义为类变量
>>> class Test:
... myvar = []
...
>>>
>>> t1 = Test()
>>> t1.myvar.append(10)
[10]
>>> t2 = Test()
>>> print(t2.myvar)
[10]
您应该在__init__
其次,在使用()
运算符调用python函数时,只需引用函数名返回函数对象。
>>> def myfunc():
... print("hello,world!")
...
>>> yourfunc = myfunc
>>> yourfunc()
hello,world!
在使用变量句子的情况下,您可以使用txt.sentences
直接访问它,在python中没有私有/公共方法区别,有_
的名称 - under和{ {1}} - dunder前缀,但这是惯例。
答案 1 :(得分:0)
试试这个:
print txt.getSentences()[0].getTokens()[0]
这应该返回列表而不是方法。
答案 2 :(得分:0)
另外注意:为了给你的类MyInstance [0]的行为,就像列表一样,你必须定义特殊的方法
__getitem__