Python装饰器管理类和函数

1 Python装饰器管理类和函数

Python装饰器可以管理函数和实例的调用,也可以直接管理函数和类本身。

1.1 装饰器将函数和类保存到字典

描述

通过装饰器将函数或类保存到字典,以便后续使用。

(1) 定义一个字典;

(2) 定义一个装饰器,将装饰的函数或类保存到字典;

(3) 装饰器不调用函数或类,直接返回函数或类;

(4) 通过字典访问保存的函数或类;

示例

>>> registry={
   }
>>> def register(obj):
    registry[obj.__name__]=obj
    return obj

>>> @register
def testadd(a,b):
    return a+b

>>> @register
def testsub(a,b):
    return a-b
>>> @register
class TestMul:
    def __init__(self,a,b):
        self.mul=a*b
    def __str__(self):
        return str(self.mul)

>>> for k in registry:
    print(k,'->',registry[k],type(registry[k]))

    
testadd -> <function testadd at 0x000001B92C23BAF0> <class 'function'>
testsub -> <function testsub at 0x000001B92C2FC040> <class 'function'>
TestMul -> <class '__main__.TestMul'> <class 'type'>

>>> for k in registry:
    print(k,'=>',registry[k](5,2))

    
testadd => 7
testsub => 3
TestMul => 10

1.2 装饰器为函数添加属性

描述

通过装饰器为装饰函数添加属性,以便后续使用。

(1) 定义一个装饰器;

(2) 为装饰函数添加属性,内部给属性值,或者外部送入属性值;

(3) 返回装饰函数;

(4) 访问装饰器函数添加的属性;

示例

>>> def markdeco(func):
    func.marked=True
    return func

>>> @markdeco
def testmul(a,b):
    return a*b

>>> testmul.marked
True
>>> def myannotate(note):
    def notedeco(func):
        func.lab=note
        return func
    return notedeco
>>> @myannotate('梯阅线条')
def testsub(a,b):
    return a-b

>>> testsub.lab
'梯阅线条'
>>> testsub(5,2)
3

相关推荐

  1. Python装饰管理函数

    2024-01-14 01:00:02       73 阅读
  2. python装饰基础

    2024-01-14 01:00:02       53 阅读
  3. Python方法装饰

    2024-01-14 01:00:02       34 阅读
  4. python函数装饰基础

    2024-01-14 01:00:02       62 阅读
  5. python函数装饰参数统计调用时间次数

    2024-01-14 01:00:02       48 阅读
  6. python装饰编写单体

    2024-01-14 01:00:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-14 01:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-14 01:00:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-14 01:00:02       82 阅读
  4. Python语言-面向对象

    2024-01-14 01:00:02       91 阅读

热门阅读

  1. PyTorch简单易懂的解析 Dropout Layers应用,代码示例

    2024-01-14 01:00:02       57 阅读
  2. Python正则表达式中sub和replace的区别

    2024-01-14 01:00:02       59 阅读
  3. 信息安全面试攻略

    2024-01-14 01:00:02       67 阅读
  4. centos 8 安装docker

    2024-01-14 01:00:02       60 阅读
  5. luogu【深基4.习9】打分

    2024-01-14 01:00:02       57 阅读
  6. 华为OD机试2024年最新题库(C++)

    2024-01-14 01:00:02       114 阅读
  7. LRU算法

    LRU算法

    2024-01-14 01:00:02      57 阅读