Python sixohsix twitter包装

2024-09-30 00:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在查看sixohsixTwitter包装器,试图理解代码,并发现例如:

t = Twitter(...)
t.statuses.home_timeline()

Twitter类或TwitterCall中没有statuses或home\u timeline方法或属性,所以很明显我这里缺少了一些python的魔力。有人能解释一下那里发生了什么事吗?你知道吗

提前多谢了!你知道吗


Tags: 方法代码home属性twittertimelinestatuses魔力
2条回答

基本上TwitterTwitterCall的一个子类,魔法发生在__getattr__。如果您正在访问一个不存在的属性,您将得到一个AttributeError。你知道吗

当发生这种情况时,它以该属性作为参数运行extend_call,并调用self.callable_cls(也恰好是TwitterCall)。这将导致另一个TwitterCall对象。然后重复相同的技巧,因为它会发现home_timeline也不存在于该对象上。然后它将调用这个对象(因为您正在编写home_timeline()),并向Twitter发出HTTP请求。你知道吗

最简单的方法是一步一步地浏览代码,看看发生了什么。访问属性时需要读取__getattr__,进行方法调用时需要读取__call__。你知道吗

有,line 141。你应该读一下^{}。你知道吗

在您的示例中,所有没有为TwitterCall类(或其子类Twitter)定义的属性,也就是说,如果AttributeErrorobject.__getattr__引发,则会递归地转换为对Twitter API的调用,uriparts将所有属性组合在一个元组中。你知道吗

因此在您的示例中,对statuses.home_timelineuri的调用将在递归结束时进行。你知道吗

相关问题 更多 >

    热门问题