我有一个简单的应用程序,我希望能够在其中添加按文本、句子和标记组织的文本。每个文本包含多个句子,每个句子包含多个标记。我的类(class)如下所示:
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>>
最佳答案
您的代码有两个问题。
首先,您将 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中没有私有(private)/公共(public)方法的区别,但是有名称带有_
-under 和 __
-dunder 前缀,但这是惯例。
关于python - 无法访问 Python 中对象内的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161308/