【问题标题】:Can't access method defined in parent class无法访问父类中定义的方法
【发布时间】:2015-07-28 13:39:31
【问题描述】:

我正在尝试使用来自TitleTrigger 的父类WordTrigger 的方法is_word_in(),但我得到一个NameErroris_word_is 未定义。我觉得我错过了继承的一个关键概念,我该如何纠正这个问题?

class NewsStory(object):
    def __init__(self, guid, title, subject, summary, link):
        self.guid = guid
        self.title = title
        self.subject = subject
        self.summary = summary
        self.link = link
    def get_guid(self):
        return self.guid
    def get_title(self):
        return self.title
    def get_subject(self):
        return self.subject
    def get_summary(self):
        return self.summary
    def get_link(self):
        return self.link

class WordTrigger(Trigger):
    def __init__(self, word):
        self.word = word.lower()
    def is_word_in(self, text):
        words = text.split(' ')
        for word in words:
            word.strip(string.punctuation).lower()
            if self.word == word:
                return True
        return False

class TitleTrigger(WordTrigger):
    def __init__(self, word):
        WordTrigger.__init__(self, word)
    def evaluate(self, story):
        self.title = story.get_title()
        if is_word_in(self.title):
            return True
        return False

trigger = TitleTrigger('Soft')
trigger.evaluate(NewsStory('', 'I prefer pillows that are soft.', '', '', ''))

【问题讨论】:

    标签: python class inheritance methods parent-child


    【解决方案1】:

    你使用的函数不正确,你需要用self调用它:

    if self.is_word_in(self.title):
       ^^^^^ 
    

    注意is_word_in前面的附加self.,用于说明您的意思是实例的方法。

    【讨论】:

    • 不使用self有什么效果?那么它试图访问什么?
    • @Jordan 如果 self 不存在,python 会尝试在您调用它的方法中查找以 is_word_in 命名的对象,这显然会给出错误。
    • 啊!现在完全有道理了,非常感谢:)
    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2014-11-17
    • 2020-05-06
    • 2022-12-08
    • 2013-11-30
    • 2016-02-11
    相关资源
    最近更新 更多