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

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中在单个列表中存储多个数据库列值   java在两个spring boot应用程序之间传输大数据   如何在Java HttpsURLConnection中增加头大小限制?   聚焦Java,点击画面外的(机器人)   axis如何通过java调用NetDocuments SOAP API?   java getBundle找不到属性文件   Java EE项目中的tomcat Log4j2配置文件   java BrowserField Cookie删除   带有报警管理器的java Android上下文   java两个日期之间的时间差   java如何在Gradle中查找/删除未使用的依赖项   多@ManagedBeans代码中的java重用对象及其方法   java将jsp页面的值与数据库值空指针异常进行比较   JavaJPanel和GridBagLayout   java使用请求。servlet中的getSession()将数据获取到servlet的最佳方法?   java当我重新打开应用程序arraylist时没有存储来自volley的值