2016-03-09 9 views
0

При создании объекта этого типа:Невозможно использовать атрибуты унаследованного класса

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 распечатаны, и я получаю сообщение об ошибке

«слушателя» объект не имеет атрибута 'a'

+1

Вам необходимо предоставить больше контекста. Как вы создаете объект 'listener'? Как вы называете 'on_data'? –

+0

done ............. – Bob

+0

Что такое 'tweet_listener? –

ответ

1

self.stream.filter() не возвращается. Это тот момент, когда API Tweepy вызывается в 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()) 
Смежные вопросы