无法在继承 class 中使用属性

Unable to use attributes in inherited class

创建此类对象时:

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
class listener(StreamListener):

    def __init__(self, consumer_key, consumer_secret, access_token, access_token_secret, a):
        StreamListener.__init__(self)
        self.auth = OAuthHandler(consumer_key, consumer_secret)
        self.auth.set_access_token(access_token, access_token_secret)
        self.stream = Stream(self.auth, self)
        self.stream.filter(track=tweet_filter.strip().split())
        self.a = 2

        print access_token

    def on_data(self, data):
        data_decoded = json.loads(data)
        body = data_decoded['text'].encode('utf-8')
        print self.a

if __name__ == '__main__':
    # parse input arguments

    t_listener = listener(consumer_key=params["consumer_key"],
                          consumer_secret=params["consumer_secret"],
                          access_token=params["access_token"],                                  access_token_secret=params["access_token_secret"],
                          a=3)

我没有看到 access_token 打印出来,我也收到错误消息

'listener' object has no attribute 'a'

self.stream.filter() 从来没有 returns。这是 Tweepy API 调用 Twitter 并循环接收 Twitter 流供听众处理的点。您不能在侦听器初始化程序中创建流,因为流需要在开始之前完全创建侦听器。

只是不要将 Stream() 处理放在侦听器中。 单独处理并传入StreamListener()实例外部__init__方法。

如果您的侦听器必须访问 API,只需将其传入即可;原来的 StreamListener.__init__() method 接受一个 api 参数:

from tweepy.streaming import StreamListener
from tweepy import API
from tweepy import OAuthHandler
from tweepy import Stream

class listener(StreamListener):
    def __init__(self, api=None, a=None):
        StreamListener.__init__(self, api=api)
        self.a = a

    def on_data(self, data):
        data_decoded = json.loads(data)
        body = data_decoded['text'].encode('utf-8')
        print self.a

if __name__ == '__main__':
    # parse input arguments
    auth = OAuthHandler(params["consumer_key"], params["consumer_secret"],)
    auth.set_access_token(access_token=params["access_token"], params["access_token_secret"])
    api = tweepy.API(auth)

    listener = listener(api, 3)
    stream = Stream(self.auth, listener)
    stream.filter(track=tweet_filter.strip().split())