我已经导入了一个很酷的包(如果它很重要,它叫做tweepy)。
但由于Twitter最近的变化,其中2种方法存在一个小的限制。已经有一个修复但它已经拉了一段时间了
我正在考虑暂时添加修复程序并覆盖现有模块,直到更新程序包,尽管我对python不太熟悉
def statuses_lookup(self, id_, include_entities=None,
trim_user=None, map_=None):
return self._statuses_lookup(list_to_csv(id_), include_entities,
trim_user, map_)
@property
def _statuses_lookup(self):
""" :reference: https://dev.twitter.com/rest/reference/get/statuses/lookup
:allowed_param:'id', 'include_entities', 'trim_user', 'map'
"""
return bind_api(
api=self,
path='/statuses/lookup.json',
payload_type='status', payload_list=True,
allowed_param=['id', 'include_entities', 'trim_user', 'map'],
require_auth=True
)
并用类似的方法覆盖它(据我所知,差异是添加额外的参数tweet_mode):
def statuses_lookup(self, id_, include_entities=None,
trim_user=None, map_=None, tweet_mode=None):
return self._statuses_lookup(list_to_csv(id_), include_entities,
trim_user, map_, tweet_mode)
@property
def _statuses_lookup(self):
""" :reference: https://dev.twitter.com/rest/reference/get/statuses/lookup
:allowed_param:'id', 'include_entities', 'trim_user', 'map', 'tweet_mode'
"""
return bind_api(
api=self,
path='/statuses/lookup.json',
payload_type='status', payload_list=True,
allowed_param=['id', 'include_entities', 'trim_user', 'map', 'tweet_mode'],
require_auth=True
)
我之前从未在python 3.X中尝试过类似的东西
答案 0 :(得分:1)
一切都是可行的。
这是关于如何破解课程的简化解决方案。即使导入了模块,并且该类用于创建对象 - 这个hack会立即影响所有现有对象:
class KLS(object):
@property
def x(self):
print('OLD')
return 100
def new_function(self):
print('NEW')
return 200
obj = KLS()
print(obj.x) # OLD + 100
KLS.x = property(new_function) # <-- HACK!
print(obj.x) # NEW + 200
该解决方案适用于py2和amp; PY3。
但是,请确保原始类中没有该属性的setter / deleters(即,它是可设置的还是只读?)对于setter,您必须调用property(getter_func, setter_func)
。< / p>
答案 1 :(得分:0)
在这种情况下,实现的最佳方式是从原始对象扩展并覆盖您想要的内容:
class CustomAPI(API):
def statuses_lookup(self, id_, include_entities=None,
trim_user=None, map_=None, tweet_mode=None):
return self._statuses_lookup(list_to_csv(id_), include_entities,
trim_user, map_, tweet_mode)
@property
def _statuses_lookup(self):
""" :reference: https://dev.twitter.com/rest/reference/get/statuses/lookup
:allowed_param:'id', 'include_entities', 'trim_user', 'map', 'tweet_mode'
"""
return bind_api(
api=self,
path='/statuses/lookup.json',
payload_type='status', payload_list=True,
allowed_param=['id', 'include_entities', 'trim_user', 'map', 'tweet_mode'],
require_auth=True
)
然后,您可以使用CustomAPI
代替API
。
假设您创建了一个新的custom_tweepy.py
文件:
from tweepy import API
class CustomAPI(API):
def statuses_lookup(self, id_, include_entities=None,
trim_user=None, map_=None, tweet_mode=None):
return self._statuses_lookup(list_to_csv(id_), include_entities,
trim_user, map_, tweet_mode)
@property
def _statuses_lookup(self):
""" :reference: https://dev.twitter.com/rest/reference/get/statuses/lookup
:allowed_param:'id', 'include_entities', 'trim_user', 'map', 'tweet_mode'
"""
return bind_api(
api=self,
path='/statuses/lookup.json',
payload_type='status', payload_list=True,
allowed_param=['id', 'include_entities', 'trim_user', 'map', 'tweet_mode'],
require_auth=True
)
然后,您最初使用的其他地方from tweepy import API
,您可以将其替换为from custom_tweepy import CustomAPI as API
。接下来,您可以使用自定义API实现。并且,您只需覆盖这两个函数,以便所有其他函数都不会更改。