python的通用插件系统

plugnpla的Python项目详细描述


即插即用

即插即用(pnp)是一个受trac(http://trac.edgewall.org)启发的通用插件系统。 内部组件管理。有了pnp,你可以很容易地把任何程序变成一个可插拔的软件。

您只需定义接口并让其他人实现它们。当你的代码运行时 您可以动态检索谁是实现特定接口的类,并调用 具体方法。

一个简单的例子

这样想:你有一个非常简单的程序,只需复制周围的文件。

假设您想通过计算 两份文件(原件和复印件)。您可以执行md5检查 在主代码中,也可以,但是当需要添加另一个检查时 (例如,计算文件的sha-1)必须修改代码 它可以调用两个方法,md5 checker和sha-1 checker。

使用pnp,你只写程序的主要部分,只做拷贝的部分, 以及可以随时实现的hash checker,,无需进行任何修改 到主代码。

pnp大致上是observer模式(http://en.wikipedia.org/wiki/Observer_pattern)的一个实现。

此示例的代码

好吧,说得太多了,现在来点代码。上述示例的伪代码为:

class CopyListener(Interface):
   def copy_finished(self, original_file, new_file):
     pass

主要代码是:

PnP.load_plugins("/some/path/with/python/files") # egg files in the future?.
copy_file(file1, file2)

# Would return all python classes that
# implement CopyListerner interface
copy_listeners = CopyListener.implementors()

# Call each of the listeners telling the copy finished
for listener in copy_listeners:
  listener.copy_finished(file1, file2)

一个这样的观察者的例子是:

from myproject.interfaces import CopyListener

class MD5Check(Plugin):
  implements = [CopyListener,]

  def copy_finished(self, file1, file2):
     md5_1 = hash.md5(file1.read()).hexdigest()
     md5_2 = hash.md5(file2.read()).hexdigest()
     if md5_1 is not md5_2:
       # Do something very useful! =)

结论

你喜欢这个项目吗?很好,帮我写吧!放弃回购 给我一些请求!或者直接跟我说,如果你有一些伟大的想法来实施!

谢谢,

道尔顿·巴雷托

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将长字符串转换为短得多的字符串   java类型ArrayList<Boolean>中的toArray(T[])方法不适用于参数(Boolean[])   java xfire webservice客户端获取空响应   java软件框架和软件平台有什么区别?   java构建了一个监听数据库更改并调用其他方法的软件。我做得对吗?   安卓 studio(java)中的Paypal:与服务器通信的问题   我们如何在运行时更改java提供的内置注释的消息   java成批进行http调用   序列化   当我使用Tomcat运行我的应用程序时,我得到了java。网MalformedURLException:本地主机名未知:java。网未知后异常   操作系统Java内存映射文件和刷新   java无法用v6构建JXBrowser jar。18+   java有没有办法从运行在同一台服务器上的代码中获取服务器指纹?   使用“代理”用户的java Spring Active Directory身份验证   在Android(Kotlin/Java)活动之间发送图像   java显示ArrayList对象?