扩展现有Python模块的最佳实践是什么–在这种情况下,我想python-twitter通过向基础API类添加新方法来扩展该包。
python-twitter
我看了看tweepy,我也很喜欢。我只是发现python-twitter更容易理解和扩展所需的功能。
tweepy
我已经编写了方法-我试图找出在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模块。