提供实用程序来实现可挂接接口

PyTapable的Python项目详细描述



Pirate
可打印

实现可挂接接口的库

Test Statuspypicodecovpython versionsDownloads a DayLicense ^{1}$ 在

:玉米:目录

:草莓:关于项目

pytatable提供了一组实用程序来帮助您在类中实现可挂接接口。这就打开了 解决许多用例的可能性,例如

  • 为你的库和框架提供可插入的接口
  • 按功能域和服务域划分代码

:sun\u with_face:入门

可以在python项目7.3中使用

$ pip install pytapable

示例

内联挂钩

我们首先创建钩子my_hook

^{pr2}$

作为消费者,我们可以通过传递tap的名称和回调函数来使用这个钩子

defmy_callback(context,greeting):print(f"Hook says: {greeting}")my_hook.tap('My Tap Name',my_callback)

我们的回调是在执行hook.call(...)时执行的。回调接收在 hook.call方法和上下文dict

my_hook.call(greeting="Hi Callback")

功能挂钩

函数钩子不同于内联钩子,因为回调参数是预定义的。在

frompytapableimportCreateHook,HookableMixin,create_hook_nameclassCar(HookableMixin):HOOK_ON_MOVE=create_hook_name('on_move')@CreateHook(name=HOOK_ON_MOVE)defmove(self,speed=10):returnf"Moving at {speed} Mph"
  • 开始向Car类添加HookableMixin。这是在类方法上安装钩子所必需的。在
  • 使用@CreateHook修饰符装饰Car.move方法。在装饰器里,给它一个名字。作为最佳实践 我们将名称定义为一个类常量,这样消费者就可以轻松地引用它。在
  • 钩子的值可以是任何值。我们使用create_hook_name(str)实用程序来生成一个唯一的名称。 不需要生成一个唯一的名称,但是当从其他类继承钩子时,它变得非常重要。在
defcallback(context,fn_args,fn_output):kmph_speed=fn_args['speed']*1.61print(f"The car is moving {kmph_speed} kmph")c=Car()c.hooks[Car.HOOK_ON_MOVE].tap('log_metric_speed',callback,before=False)c.move(10)
  • 在这里,我们进入on_move钩子,该钩子在c.move方法执行后触发回调
  • c.move()参数作为fn_args传递给回调,返回值(如果有)将作为fn_output传递
  • 上下文包含一个is_beforeis_after标志,它表示回调是在c.move()之前还是之后执行的

:热带饮料:文件

这里有完整的文档 https://pytapable.readthedocs.io/en/latest

:满意:贡献

贡献使开源社区成为一个值得学习、启发和创造的地方。 您所做的任何贡献都将受到的高度赞赏。在

  1. 把项目分成两半
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交更改(git commit -m 'Add some AmazingFeature'
  4. 推到分支(git push origin feature/AmazingFeature
  5. 打开拉取请求

要在本地测试更改,请运行:

$ pip install -r test_requirements.txt
$ tox .

这将在python-2和python-3上运行您的更改

任何新更改的文档都是必须的。我们使用Sphinx和来构建 本地文档,运行:

$ cd docs/
$ make html
    # or on windows
$ make.bat html

:v:许可证

分布在Apache License

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

推荐PyPI第三方库


热门话题
java使用prepared语句在oracle中插入日期   对点具有双重值的java   使用多个通配符的java请求映射   java Springboot为什么要设置springbootstartertomcat   除了对JavaBean的请求之外,还使用servletContext的servlet   java如何清除OCSID。返回到池的连接时的CLIENTID JDBC客户端信息属性   将整型数组转换为光栅Java   java使用对象引用作为互斥锁   java为什么在编程语言中使用sin函数返回奇怪的sin值不像计算器   java如何将JButton链接到对象并调用相关方法   php用Java发送POST数据   导航属性的java模拟加载   java多个活动错误Android试图对空对象引用调用虚拟方法“”   java Android更改ActionBar文本颜色   如何使用带有java反射且不带开关的parant引用创建子类