我想使用python-twitter,但扩展了Status类以添加一些新方法和属性.什么是pythonic方式做到这一点?
目前,我有一些功能可以为状态添加属性和新功能,例如
process_status(status):
status.datetime = ...
status.phrase = ...
prettyprint_status(status):
# do something...
自然,我只想将其他方法添加到Status构造函数中.我发现一个* question discussing this,它提议制作一个新模块ext-twitter,其中包含每个类的新实现,如下所示:
# ext_twitter.py
import twitter
class Api(twitter.Api):
pass
class Status(twitter.Status):
def __init__(self, *args):
twitter.Status.__init__(self, *args)
self.args = args
self.time = parseTime(self.created_at)
self.phrase = ...
def prettyprint(self):
# something
但是,这不起作用,因为Status类是由Twitter API对象生成的,并且这里ext-twitter.Api()调用python-twitter.Api(),而该引用没有引用我的扩展Status类.
有什么方法可以将我的功能添加到python-twitter模块中,而无需分叉和制作自己的版本?
解决方法:
尝试这个:
# patch_twitter.py
import twitter
TwitterStatus = twitter.Status
class Status(TwitterStatus):
def __init__(self, *args, **kwargs):
TwitterStatus.__init__(self, *args, **kwargs)
self.args = args
self.time = parseTime(self.created_at)
self.phrase = ...
def prettyprint(self):
# something
twitter.Status = Status
# use api
至少对于“工作”的某些值,这应该有效.如果还有其他捕获对最初存储在twitter.Status中的类对象的引用,则这些引用将不会更新.这种情况不会经常发生,但是可能是一些细微错误的来源.
您需要在导入twitter.py之后以及执行其他操作之前立即导入此文件.