Python-如何更改模块实现?

我想使用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之后以及执行其他操作之前立即导入此文件.

上一篇:java-不知道如何创建一个菜单,该菜单使用其他类的方法


下一篇:[置顶]年少痴狂,怀恋曾经的创业岁月,语音识别的应用远远未到高潮,本人的软件源码开源,需要的留下Email,我给大家发