我正在尝试覆盖此类的名为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'],
)
最重要的是,result
和next_cursor
已经显示为未在我的IDE中定义。
答案 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