Can';t在Python中访问对象中的列表

Can';t在Python中访问对象中的列表,python,Python,我有一个简单的应用程序,我希望能够添加文本,句子和标记组织的文本。每个文本包含多个句子,每个句子包含多个标记。我的课程是这样的: class Text: sentences = [] def __init__(self, meta): self.meta = meta def getSentences(self): return self.sentences def addSentence(self, s):

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

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
print txt.getSentences[0].getTokens[0]
然后我创建一个标记、一个句子和一个文本,如下所示:

token = Token("a", "b")
sent = Sentence()
sent.addToken(token)
txt = Text("meta")
txt.addSentence(sent)
现在,当我想访问该令牌,即第一个文本第一句的第一个令牌时,我希望能够执行如下操作:

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
print txt.getSentences[0].getTokens[0]
。。。这根本不起作用。我可以像这样访问GetSequences方法

 print txt.getSentences
这给了我这个

 <bound method Text.getSentences of <txt.Text instance at 0x1006d5a70>>

试试这个:

print txt.getSentences()[0].getTokens()[0]

这将返回列表而不是方法。

您的代码有两个问题

首先,您将
语句
标记
定义为类变量

>>> class Test:
...     myvar = []
... 
>>> 
>>> t1 = Test()
>>> t1.myvar.append(10)
[10]
>>> t2 = Test()
>>> print(t2.myvar)
[10]
您应该在
中初始化这些变量

其次,在python中,函数是通过
()
操作符调用的,只要引用函数名就返回函数对象

>>> def myfunc():
...     print("hello,world!")
... 
>>> yourfunc = myfunc
>>> yourfunc()
hello,world!

在使用可变句子的情况下,您可以使用
txt.statemens
直接访问它,python中没有私有/公共方法的区别,在
-和
-dunder前缀下有名称,但这是惯例。

作为补充说明:为您的类提供MyInstance[0]的行为,与list一样,您必须定义特殊的方法

__getitem__

你不能调用self.句子。您的句子列表不是实例变量,因为您没有在init中定义它。如果要将其用作类变量,请使用:
Text.句
。在每个类中,包含元素的列表不是实例属性,而是
类属性
。将它们移动到
\uuuu init\uuuuu
(例如
self.tokens=[]
)@Scott这是不正确的:
self.attribute
到达变量,但它不属于对象实例,而是属于类。所以它在类的每个对象之间共享。我现在已经把我的列表放在init中了,但是我仍然不知道如何访问令牌。例如,“print txt.getSequences()[0]”给了我“”。您想打印什么?单词还是位置?您可以执行打印txt.GetSequences()[0].getTokens()[0].getWord()
的操作,它可以打印
a
。或者您可以向令牌添加一个方法:
def\uu str\uuuu(self):返回“word:{},pos:{}”。格式化(self.word,self.pos)
,这样您就可以打印整个令牌:
print txt.get句子()[0]。getTokens()[0]
打印:
word:a,pos:b
。但不清楚您想要得到什么作为输出。