如何在Python中从子类访问超类的成员和变量?
我有一段代码:
class Trigger(object):
def evaluate(self,story):
Trigger.stroy=story
WordTrigger.isWordin(story)
raise NotImplementedError
class WordTrigger(Trigger):
def __init__(self,word):
self.word=word
def isWordin(self, text):
rep = text.replace(string.punctuation, '')
toLower = rep.lower()
text = toLower.split(' ')
if(text in self.word):
return True
else:
return False
class TitleTrigger(WordTrigger):
...
这里的变量 story 是一个类。
class NewsStory: 这段代码定义了一个叫做 NewsStory 的类。这个类有一个特殊的函数叫做 __init__,它在创建这个类的对象时会被自动调用。这个函数需要一些信息,比如 guid、title、subject、summary 和 link,然后把这些信息存储到对象里。
接下来,这个类还定义了一些方法(也就是函数),可以用来获取之前存储的信息。比如:
getGuid:获取guid。getTitle:获取title。getSubject:获取subject。getSummary:获取summary。getLink:获取link。
然后用 story=NewsStory(...) 这行代码创建了一个 story 的对象,里面包含了之前提到的信息。
接下来,问题是:如何在子类 TitleTrigger 中访问这个 story 变量和它里面的函数呢?
相关问题:
1 个回答
0
我想到两种方法。一种是使用类变量,另一种是使用初始化变量。下面是一个同时展示这两种方法的例子:
class NewsStory:
def __init__(self,guid, title, subject, summary, link):
self.guid=guid
self.title=title
self.subject=subject
self.summary=summary
self.link=link
def getGuid(self):
return self.guid
def getTitle(self):
return self.title
def getSubject(self):
return self.subject
def getSummary(self):
return self.summary
def getLink(self):
return self.link
class Trigger(object):
story = NewsStory("Guide","title", "subject", "summary","link")
def __init__(self):
self.mystory = NewsStory("Guide","title", "subject", "summary","link")
def evaluate(self,story):
Trigger.story=story
WordTrigger.isWordin(story)
raise NotImplementedError
class WordTrigger(Trigger):
def __init__(self,word):
super(WordTrigger, self).__init__()
self.word=word
def isWordin(self, text):
rep = text.replace(string.punctuation, '')
toLower = rep.lower()
text = toLower.split(' ')
if(text in self.word):
return True
else:
return False
class TitleTrigger(WordTrigger):
story = WordTrigger.story
def __init__(self, word):
super(TitleTrigger, self).__init__(word)
if __name__ == "__main__":
print(TitleTrigger.story)
tt = TitleTrigger("hello")
print(tt.mystory)
这里的story变量是一个类变量,而mystory变量是一个实例变量。你可以通过像super(WordTrigger, self).__init__()这样的方式来初始化父类,这样父类的变量就可以使用了。希望这对你有帮助。
编辑:要从NewsStory访问和修改标题,你可以这样做:
print(tt.mystory.title)
tt.mystory.title = "New title"
print(tt.mystory.title)