无法访问Python中对象内的列表

时间:2015-12-08 16:41:53

标签: python

我有一个简单的应用程序,我希望能够添加以文本,句子和标记组织的文本。每个文本包含许多句子,每个句子包含许多标记。我的课程看起来像这样:

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>>

3 个答案:

答案 0 :(得分:2)

您的代码存在两个问题。

首先,您将sentencestokens定义为类变量

>>> 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__