在类中的函数之间传递变量

时间:2015-10-29 18:08:41

标签: python oop nlp nltk

试图分裂和标记一首诗(在这种情况下是ha句),这更像是一种教会自己如何使用nltk和类的方法。当我运行下面的代码时,即使(我的想法)我得到一个Name Error: name 'psplit' is not defined,当我从split函数返回它时它被定义了。任何人都可以帮我弄清楚这里出了什么问题吗?

import nltk

poem = "In the cicada's cry\nNo sign can foretell\nHow soon it must die"

class Intro():
    def __init__(self, poem):
        self.__poem = poem

    def split(self):
        psplit = (poem.split('\n'))
        psplit = str(psplit)
        return psplit

    def tokenizer(self):
        t = nltk.tokenize(psplit)
        return t

i = Intro(poem)
print(i.split())
print(i.tokenizer())

1 个答案:

答案 0 :(得分:3)

您的代码中存在一些问题:

split方法中,您必须使用self.__poem来访问类的poem属性 - 就像在构造函数中所做的那样。

psplit方法中的split变量只是一个局部变量,所以你可以在这个方法中使用它而不是其他地方。如果要在tokenize方法中使变量可用,则必须将其作为参数传递或将其存储为附加属性:

...
def tokenizer(self, psplit):
    t = nltk.tokenize(psplit)
    return t
...

psplit = i.split()
print(i.tokenizer(psplit))

或者:

def __init__(self, poem):
   ...
   self._psplit = None

...
def split(self):
    self._psplit = (poem.split('\n'))
    self._psplit = str(psplit)

def tokenizer(self):
    t = nltk.tokenize(self._psplit)
    return t

...
i.split()
print(i.tokenizer())

另外请确保缩进正确。