文章目录

  • 一、什么是 python 注册器
  • 二、python 注册器怎么用

一、什么是 python 注册器

python 的 register 类可以理解为一个字典,这个字典里边会存储很多相同系列的类。

注册器也可以让工程扩展性变好,当需要增加新类的时候,可以复用之前的逻辑,只需要给注册器这个字典里边添加即可。

二、python 注册器怎么用

以 mmdet 为例,mmdet/models/registry.py 代码如下:

# mmdet.utils 的 Registry 中实现了注册器类
from mmdet.utils import Registry
# 这里都是对注册器类的实例化,传入的是一个字符串,这个字符串是name属性
# 注册了一个对象名为 BACKBONES,属性名为 backbone 的对象
BACKBONES = Registry('backbone')
NECKS = Registry('neck')
ROI_EXTRACTORS = Registry('roi_extractor')
SHARED_HEADS = Registry('shared_head')
HEADS = Registry('head')
LOSSES = Registry('loss')
DETECTORS = Registry('detector')

简单例子:

class RegisterMachine(object):def __init__(self, name):# name of registerself._name = nameself._name_method_map = dict()def register(self, obj=None):# obj == None for function call register# otherwise for decorator wayif obj != None:name = obj.__name__self._name_method_map[name] = objelse:def wrapper(func):name = func.__name__self._name_method_map[name] = funcreturn funcreturn wrapperdef get(self, name):return self._name_method_map[name]if __name__ == "__main__":register_obj = RegisterMachine("register") # <__main__.RegisterMachine object at 0x7fa5d8aaba00># register_obj._name = 'register'# register_obj._name_method_map = {}# decorate method@register_obj.register()def say_hello_with(name):print("Hello, {person}!".format(person=name))def say_hi_with(name):print("Hi, {person}!".format(person=name))register_obj.get("say_hello_with")("Peter") # output: Hello, Peter!# 这个时候的 register_obj: # {# 'say_hello_with': <function say_hello_with at 0x7feb6ca2e790># }register_obj.register(say_hi_with)          # output: None# 这个时候的 register_obj: # {# 'say_hello_with': <function say_hello_with at 0x7feb6ca2e790>, # 'say_hi_with': <function say_hi_with at 0x7feb6dc821f0># }register_obj.get("say_hi_with")("John")     # output: Hi, John!# 这个时候的 register_obj: # {# 'say_hello_with': <function say_hello_with at 0x7feb6ca2e790>, # 'say_hi_with': <function say_hi_with at 0x7f7c91ce41f0># }
register_obj.get("say_hello_with")("Peter") # get → register → say_hello_with
register_obj.get("say_hi_with")("John")     # get → say_hi_with

【python 9】python注册器相关推荐

  1. Python中的Register(注册器)模块,Registry(注册机制)的讲解及示例

    文章目录 前言 为什么使用`Register`或`Registry`? `Register`机制怎么用? 定义`Register` 使用`Register` 使用装饰器注册模块 将Register实例 ...

  2. python三大神器装饰器_Python2.x

    1)自动化 2)python编写的 openstack jumpserver ansible SaltStack yuanj zabbix json docker yaml 2)The Zen of ...

  3. python制作连点器_python群聊工具实现(上)

    相信都有使用过聊天工具聊过天,不管使用QQ还是微信,首先得注册一个账号,聊天前,你得加对方为好友,之后才可以聊天. 前面也写过一片使用socket通信的文章,在里面讲到,两台机器要聊天,首先其中一方得 ...

  4. python 进阶:修饰器的介绍

    参考链接:Python 函数装饰器 我认为python中的装饰器是一个很厉害的功能,他能瞬间提升代码的逼格,但对于我这样的小白来说,别说为所欲为的使用了,就连简单的尝试一下,却也是难于登天.经过长达半 ...

  5. python装饰器原理-python 中的装饰器及其原理

    装饰器模式 此前的文章中我们介绍过装饰器模式: 装饰器模式中具体的 Decorator 实现类通过将对组建的请求转发给被装饰的对象,并在转发前后执行一些额外的动作来修改原有的部分行为,实现增强 Com ...

  6. python装饰器类-PYTHON里的装饰器能装饰类吗

    扩展回答 如何理解python里的装饰器 通常可以理解它是一个hook 的回调函数. 或者是理解成python 留给二次开发的一个内置API. 一般是用回调和hook 方式实现的. 如何理解Pytho ...

  7. python类装饰器详解-python 中的装饰器详解

    装饰器 闭包 闭包简单的来说就是一个函数,在该函数内部再定义一个函数,并且这个内部函数用到了外部变量(即是外部函数的参数),最终这个函数返回内部函数的引用,这就是闭包. def decorator(p ...

  8. python中的装饰器decorator

    python中的装饰器 装饰器是为了解决以下描述的问题而产生的方法 我们在已有的函数代码的基础上,想要动态的为这个函数增加功能而又不改变原函数的代码 例如有三个函数: def f1(x):return ...

  9. python生成器和装饰器_python之yield与装饰器

    防伪码:忘情公子著 python中的yield: 在之前发布的<python之列表解析与生成器>中我们有提到过,生成器所实现的是跟列表解析近似的效果,但是我们不能对生成器做一些属于列表解析 ...

最新文章

  1. linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...
  2. POJ 3278 Catch That Cow
  3. html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?
  4. 如何备份和还原 Outlook Express 数据
  5. cf600 E. Lomsat gelral
  6. php 链接文件名_7、php-fpm进程管理
  7. Windows下 maven3.0.4的安装步骤+maven配置本地仓库
  8. LeetCode 396. 旋转函数(数学)
  9. 数据:近24小时以太坊2.0存款合约新增2.06万ETH
  10. python 网络编程模块_Python网络编程之socket模块
  11. 在使用Git提交代码的时候犯了个低级错误
  12. pdf2image安装
  13. UE4 WebBrowser插件版本
  14. 安卓开关Switch使用的小细节
  15. 【离散数学】最大元素、最小元素、极大元素、极小元素、上界、下界、最小上界(上确界)、最大下界(下确界)
  16. Kanban看板管理实践精要
  17. 概率论知识回顾(十):二维连续随机变量分布函数和联合密度函数
  18. CVPR2022:计算机视觉中长尾数据平衡对比学习
  19. ProGAN: Network Embedding via Proximity Generative Adversarial Network 论文笔记
  20. deepin改无盘服务器,UbuntuDeepin系统上搭建nfs服务器

热门文章

  1. axios中POST请求变成OPTIONS处理
  2. Docker搭建NSQ实时分布式消息集群
  3. Mac下Nginx、PHP、MySQL 和 PHP-fpm安装配置
  4. 利用SharedPreferences完成记住账号密码的功能
  5. 在XX公司工作第二天,维护已有代码
  6. 乐游 游戏论坛开发第二阶段
  7. jquery表单数据反序列化为字典
  8. Android Resource介绍和使用
  9. ubuntu下安装mysql 杂记
  10. [翻译]Windows Vista的秘密#11: 删除不可删除的东西