覆盖类的方法并访问其变量

时间:2013-09-17 19:09:04

标签: python python-twitter

我正在尝试覆盖此类的名为GetFollowerIDs的方法: https://github.com/bear/python-twitter/blob/master/twitter.py#L3705

我想要实现的是正常执行该功能,然后获得next_cursor而不只是result

我尝试了以下内容:

class MyApi(twitter.Api):
    def GetFollowerIDs(self, *args, **kwargs):
        super(MyApi, self).GetFollowerIDs(*args, **kwargs)

        print result
        print next_cursor

我收到了这个错误:

TypeError: unbound method GetFollowerIDs() must be called with MyApi instance as first argument (got nothing instead)

当这样称呼时:

ids = MyApi.GetFollowerIDs(
                    screen_name=options['username'],
                    cursor=cursor,
                    count=options['batch-size'],
                    total_count=options['total'],
                )

最重要的是,resultnext_cursor已经显示为未在我的IDE中定义。

2 个答案:

答案 0 :(得分:2)

TypeError与您的定义无关,但与您的通话有关:

ids = MyApi.GetFollowerIDs(
                    screen_name=options['username'],
                    cursor=cursor,
                    count=options['batch-size'],
                    total_count=options['total'],
                )

GetFollowerIDs是一种实例方法,这就是它需要self参数的原因。所以你必须在类的实例上调用它,而不是类本身。

API文档示例显示了如何正确创建和使用twitter.API的实例;除了创建和使用MyApi的实例之外,您将做同样的事情。

如果指出这一点并不明显,您也可以阅读Classes上的教程或某些第三方教程。


同时,在该方法中,您通过super正确调用基类...但是,这不允许您从基类方法访问局部变量。局部变量是本地的;它们只在方法运行时存在。因此,在基类方法返回后,它们甚至不再存在。

您的IDE说它们没有被定义的原因是它们实际上没有定义,除非在该方法的实现中。

如果您确实需要访问方法实现的内部状态,唯一合理的解决方法是将该方法的实现复制到您的代码中,而不是调用该方法。

答案 1 :(得分:-2)

问题是,在调用self时,您会忘记第3行中的参数GetFollowerIDs

class MyApi(twitter.Api):
    def GetFollowerIDs(self, *args, **kwargs):
        super(MyApi, self).GetFollowerIDs(self,*args, **kwargs)

        print result
        print next_cursor