当前位置: 首页 > 面试题库 >

如何扩展python模块?在python-twitter包中添加新功能

东郭腾
2023-03-14
问题内容

扩展现有Python模块的最佳实践是什么–在这种情况下,我想python-twitter通过向基础API类添加新方法来扩展该包。

我看了看tweepy,我也很喜欢。我只是发现python-twitter更容易理解和扩展所需的功能。

我已经编写了方法-我试图找出在python-twitter不更改此模块核心的情况下将其添加到package模块中的最Pythonic且破坏性最小的方法。


问题答案:

几种方法。

简单的方法:

不要扩展模块,扩展类。

exttwitter.py

import twitter

class Api(twitter.Api):
    pass 
    # override/add any functions here.

缺点:twitter中的每个类都必须位于exttwitter.py中,即使它只是一个存根(如上所述)

一种更困难的(可能是非Python的)方式:

将*从python-twitter导入一个模块,然后进行扩展。

例如 :

basemodule.py

 class Ball():
    def __init__(self,a):
        self.a=a
    def __repr__(self):
        return "Ball(%s)" % self.a

def makeBall(a):
    return Ball(a)

def override():
    print "OVERRIDE ONE"

def dontoverride():
    print "THIS WILL BE PRESERVED"

extmodule.py

from basemodule import *
import basemodule

def makeBalls(a,b):
    foo = makeBall(a)
    bar = makeBall(b)
    print foo,bar

def override():
    print "OVERRIDE TWO"

def dontoverride():
    basemodule.dontoverride()
    print "THIS WAS PRESERVED"

runscript.py

import extmodule

#code is in extended module
print extmodule.makeBalls(1,2)
#returns Ball(1) Ball(2)

#code is in base module
print extmodule.makeBall(1)
#returns Ball(1)

#function from extended module overwrites base module
extmodule.override()
#returns OVERRIDE TWO

#function from extended module calls base module first
extmodule.dontoverride()
#returns THIS WILL BE PRESERVED\nTHIS WAS PRESERVED

我不确定extmodule.py中的double import是否是pythonic
-您可以将其删除,但是这样您就无法处理想要扩展basemodule命名空间中的函数的用例。

至于扩展类,只需创建一个新的API(basemodule.API)类即可扩展Twitter API模块。



 类似资料:
  • 问题内容: 跟进有关重新加载模块的问题,如何从已更改的模块重新加载特定功能? 伪代码: 问题答案: 您想要的是可能的,但是需要重新加载两件事……首先,但是您还必须这样做(假设是包含该语句的模块的名称)。 至于为什么…第一次加载时,将创建一个对象,其中包含一个对象。当您导入到模块,它存储到一个参考。当被调用时,对象被消隐,并且该模块重新执行。这意味着所有引用仍然有效,但是已经创建了一个新对象…因此,

  • 更新问题: 在这一点上,如果有人能给我任何提示,我可以添加任何类型的扩展在运行时在selenium中,我的目标是能够运行脚本,并让chrome安装扩展和活动,因为当你运行chromedriver时,chrome就像香草一样(没有安装或活动的扩展)我试过以下答案,但没有运气,我试过查找视频,查看文档,但我总是失败,如果有人有任何见解,我将非常感谢!!! 当我使用selenium时,我试图解除阻止or

  • 问题内容: 有人可以告诉我如何在最新版本的Python上安装sqlite3模块吗?我正在使用Macbook,并在命令行上尝试了: 但是会弹出一个错误。 问题答案: 您不需要安装模块。它包含在标准库中(自Python 2.5起)。

  • 问题内容: 我有一个C扩展模块,很高兴分发内置的二进制文件。SetupTools使得在OS X和GNU / Linux上构建扩展模块变得很容易,因为那些OS随GCC一起提供,但是我不知道如何在Windows中进行。 我需要购买Visual Studio的副本,还是可以使用Visual Studio Express?我可以只使用Cygwin或MinGW吗? 问题答案: 您可以同时使用MinGW和VC

  • dc_motor_driver --- 双直流电机驱动模块 功能相关函数 dc_motor_driver.set_power(speed, ch = 0) 设置双路直流电机各路电机的动力,参数: speed 控制目标电机的动力值,参数范围是 -100 ~ 100。 ch 控制的电机通道,参数范围是 0 ~ 2,其中 0 表示两路电机通道,1 表示插槽1通道,2 表示插槽2通道。 程序示例 impo

  • 问题内容: 我有一台运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 你可以使用reload内置函数重新加载已导入的模块: 在Python 3中,已移至imp模块。在3.4中,不推荐使用importlib,而在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是你想要的。诸如Django开发服务器