Python类:数据不知怎么丢失了



我正在尝试定义一个Python类,该类通过praw包分析subreddit数据。

我对C++中的OOP相当有经验,但对Python中的OOP没有太多经验。这是我迄今为止的代码:

import praw
class SubRedditAnalyzer:
    def __init__(self, reddit_session, name='dataisbeautiful'):
        self.name = name # subreddit name
        self.reddit_session = reddit_session # assign the reddit session
        self.subreddit = self.reddit_session.get_subreddit(self.name) # create the subreddit object
        self.timeframe = 'day'
        self.max_post_count = 10
        self.submissions = self.subreddit.get_top_from_hour(limit=10)
    def __del__(self):
        class_name = self.__class__.__name__
        print class_name, "destroyed"
    def get_top_submissions(self, max_post_count):
        timeframe = self.timeframe
        if (timeframe == 'hour'):
            self.submissions = self.subreddit.get_top_from_hour(limit= max_post_count)
        elif (timeframe == 'day'):
            self.submissions = self.subreddit.get_top_from_day(limit= max_post_count)
        elif (timeframe == 'week'):
            self.submissions = self.subreddit.get_top_from_week(limit= max_post_count)
        elif (timeframe == 'month'):
            self.submissions = self.subreddit.get_top_from_month(limit= max_post_count)
        elif (timeframe == 'year'):
            self.submissions = self.subreddit.get_top_from_year(limit= max_post_count)
        elif (timeframe == 'all'):
            self.submissions = self.subreddit.get_top_from_all(limit= max_post_count)
    def combine_titles(self):
        titles = ""
        for submission in self.submissions:
            titles += submission.title
        self.titles = titles 
    def display_titles(self):
        counter = 1
        ya = self.submissions
        for sub in self.submissions:
            sc = sub.score
            ti = sub.title
            print('T%d- [%d] %s n' %(counter,sc,ti))
            counter += 1
def main():
   r = praw.Reddit('Request to fetch data by user')
   sr = SubRedditAnalyzer(r, 'dataisbeautiful')
   sr.get_top_submissions(15) # top 15 from reddit
   sr.combine_titles()        # combine the top titles    
   sr.display_titles()        # display all the titles 
main()

由于某种未知的原因(对我来说(,类"sr"中的数据似乎在调用后丢失了

sr.combine_titles()

当我尝试调用这个方法时,类中的数据是空的:

sr.display_titles()

事实上,我确实看到了类被破坏的消息:

SubRedditAnalyzer已销毁

我做错了什么?提前感谢您的关注。

似乎self.submissions可能是可迭代的,但不是集合(例如列表(。文档将get_top_from_hour()称为生成器方法(尽管他们也声明返回的是列表…(。如果它确实是生成器方法,则结果只能迭代一次。迭代中的所有其他尝试都将以静默方式失败(display_titles()中的循环不执行任何操作(。

因此,解决方案是:

self.submissions = list(self.subreddit.get_top_from_hour(limit=10))

__init__()中,将可迭代集合转换为可多次迭代的永久集合(列表(。

根据PRAW文档,get_content及其相关方法(如get_top_from_hour(返回生成器。生成器只能迭代一次,您可以在combine_titles中执行此操作。在该迭代之后,生成器将耗尽并且不能再次迭代。

当您在__init__:中获得提交时,您可能会将其转换为列表

self.submissions = list(self.subreddit.get_top_from_hour(limit=10))

相关内容

最新更新