如何在类方法中引用变量?

时间:2017-08-09 01:47:59

标签: python python-3.x class methods

希望有人能帮助我尝试打印类方法的变量。如下面的代码中所示,我想打印方法的变量A" on_status",这是我的类MyStreamListener的一部分。这可能吗?一点菜鸟问题......欣赏任何见解。谢谢!

Y = 0
class MyStreamListener(tweepy.StreamListener):

    def __init__(self, api=None, **options):
        self.api = api
        self.retry_time_start = options.get("retry_time", 5.0)
        self.retry_420_start = options.get("retry_420", 60.0)

    def on_connect(self):
        pass

    def on_status(self, status):
        X = '@' + status.user.screen_name + ' - ' + status.text
        if not any(badword in X for badword in badwords):
            print(X)
            print(status.created_at)
            self.A = status.user.screen_name



    def on_error(self, status_code):
        if status_code == 420:
            Y = 1


myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener)
# async parameter on filter will allow stream to run on a new thread when connection is closed and old thread is blocked
while True:

    if Y != 1:
        print(myStream.filter(track=['test'], async = True))
        --- WANT TO PRINT VARIABLE A HERE ---

1 个答案:

答案 0 :(得分:1)

首先,你不应该将你班级的普通方法描述为"类方法"。在Python中,作为"类方法"是一个在类上调用的方法,而不是在类的对象上调用的方法。这些方法是使用@classmethod decorator定义的,并将类(按约定命名为cls)而不是对象(按约定命名为self)作为其第一个参数。 (因此,MyStreamListener类方法可以被称为MyStreamListener.my_class_method()myStreamListener.my_class_method(),其中myStreamListenerMyStreamListener类型的对象。)

其次,如果在方法中分配变量self.A,则该变量属于对象,而不是方法,并且可以在对象可用的任何位置访问,如object_var.A,其中{ {1}}是保存对象的变量。如果您在某个方法中,则可以使用object_var。如果您刚刚将您的班级实例化为self.A的客户端代码,那么您将使用myStreamListener

第三,如果您将从myStreamListener.A之外的A访问on_status,它可能尚未初始化,您应该在__init__中使用一些合理的价值对其进行初始化。