我想使用 python-twitter
,但扩展 Status
类以添加一些新方法和属性。执行此操作的 pythonic 方法是什么?
目前,我有一些函数可以为 Status
添加属性和新功能,例如
process_status(status):
status.datetime = ...
status.phrase = ...
prettyprint_status(status):
# do something...
当然,我只想将额外的方法添加到 Status
构造函数中。我找到了一个 stackoverflow 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 模块,而无需 fork 并制作我自己的版本?
最佳答案
试试这个:
# 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
之后和执行任何其他操作之前立即导入它。
关于Python - 如何更改模块实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16502315/