简体   繁体   English

无法在继承的类中使用属​​性

[英]Unable to use attributes in inherited class

When creating an object of this type: 创建此类型的对象时:

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)

I don't see access_token printed out, and I also get the error message 我看不到access_token打印出来,并且我也收到错误消息

'listener' object has no attribute 'a' “侦听器”对象没有属性“ a”

self.stream.filter() never returns. self.stream.filter()永不返回。 It is the point at which the Tweepy API calls out to Twitter, and in a loop receives the twitter stream for your listener to handle. 这是Tweepy API调用Twitter的地方,并在循环中接收Twitter流供您的侦听器处理。 You can't create the stream inside the listener initialiser, as the stream needs the listener to be fully created before it can start. 您无法在侦听器初始化程序内创建流,因为该流需要完全创建侦听器才能启动。

Simply don't put Stream() handling in the listener. 只是不要将Stream()处理放在侦听器中。 Handle that separately and pass in your StreamListener() instance outside of the __init__ method. 单独处理并在__init__方法之外传入您的StreamListener()实例。

If your listener must have access to the API, just pass it in; 如果您的侦听器必须有权访问该API,则只需将其传递; the original StreamListener.__init__() method accepts an api argument: 原始的StreamListener.__init__()方法接受一个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())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM