3

私はこの特定の問題について少し混乱しており、かなり前からこの問題に悩まされてきました。問題は、新しいクラス変数を既に定義されているクラスに適切に追加する方法がわからないことです。私のシナリオでは、「lol」を含む Twitter メッセージを取得するために、tweepy モジュールとそのストリーミング API を使用しています。

これまでのコードは次のとおりです。

import tweepy

class StreamListener(tweepy.StreamListener):
    #I want to add some code here in order to open a file

    def on_status(self, status):
        try:
            #Rather than printing here I would like to write to the file
            print status.text
        except:
            self.textOut.close()

    auth1 = tweepy.auth.OAuthHandler(XXXXX, XXXX)
    auth1.set_access_token(XXXXX, XXXXX)
    api = tweepy.API(auth1)

    textOut = open('twitterMessages.txt')
    l = StreamListener()
    streamer = tweepy.Stream(auth=auth1, listener=l, timeout=3000000000 )
    setTerms = ['lol', 'Lol', 'LOL']
    streamer.filter(None,setTerms)

私がしたコメントを見てください。最初にファイルを開いてファイルに書き込みたい。問題は、init メソッドを作成するときに、元のinitメソッドをオーバーライドしているように見えることです。

4

2 に答える 2

4

Use super to call the original __init__, and wrap the file I/O in a with statement:

auth1 = tweepy.auth.OAuthHandler('CONSUMER KEY','CONSUMER SECRET')
auth1.set_access_token('ACCESS TOKEN','ACCESS TOKEN SECRET')
api = tweepy.API(auth1)

class StreamListener(tweepy.StreamListener):
    def __init__(self, f):
        super(StreamListener, self).__init__()
        self._f = f
    def on_status(self, status):
        printf(status)
        self._f.write(status.text)

with open('twitterMessages.txt', 'w') as outf:
    l = StreamListener(outf)
    streamer = tweepy.Stream(auth=auth1, listener=l, timeout=3000000000 )
    setTerms = ['lol', 'Lol', 'LOL']
    streamer.filter(None,setTerms)
于 2012-07-29T21:59:15.433 に答える
3

__init__独自に記述し、基本クラスを呼び出すことができます__init__:

class SubClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        # do whatever you want here

カスタマイズ__init__した場合は、ファイルを開いて実行できます。たとえば、self.outFile = open("somefile.txt", "w")メソッドでon_status実行するself.outFile.write(status.text)などです。

于 2012-07-29T21:46:18.300 に答える