python用类装饰函数的一个有趣实现

class RunningLog:
    def __init__(self,func):
        self._func=func
        self._func_name = func.__name__

    def __call__(self,func_name,level=None):
        self.level=level
        value=getattr(self, func_name.__str__())()
        self._func(func_name,self.level)
        return ‘result: ‘+value

    def fun(self):
        print ‘get value from class‘,self.level
        print ‘do something‘
        return ‘test end‘

@RunningLog
def bar(func_name,level=None):
    print ‘has done ‘,func_name
    print ‘level name===>‘,level

result=bar(‘fun‘,level=‘test‘)
print result

  

原文地址:https://www.cnblogs.com/slqt/p/10343032.html

时间: 2024-10-09 00:26:26

python用类装饰函数的一个有趣实现的相关文章

Python入门之python装饰器的4种类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类

一:函数装饰函数 def wrapFun(func): def inner(a, b): print('function name:', func.__name__) r = func(a, b) return r return inner @wrapFun def myadd(a, b): return a + b print(myadd(2, 3)) 二:函数装饰类 def wrapClass(cls): def inner(a): print('class name:', cls.__na

由浅入深,走进Python装饰器-----第二篇:进阶--类装饰函数

**类装饰器** @类 函数 2.1 用类装饰器来扩展原函数 # 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回 class KuoZhan(): def __call__(self,f): return self.newfunc(f) def newfunc(self,f): def in_newfunc(): print("1") f() print("2") return in_newfunc @KuoZhan() #1. KuoZ

python中的装饰函数

在面向对象(OOP)的设计模式中,decorator被称为装饰模式.OOP的装饰模式需要通过继承和组合来实现,而Python除了能支持OOP的decorator外,直接从语法层次支持decorator.Python的decorator可以用函数实现,也可以用类实现. decorator可以增强函数的功能,定义起来虽然有点复杂,但使用起来非常灵活和方便. 请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call'的日志. 再思考一下能否写出一个@log的d

Python入门二:函数

一.函数的定义和使用 1.基本结构: 1 def 函数名(参数): 2 """ 3 文档字符串 4 """ 5 函数体 6 返回值 7 2.函数名: 和变量名命名规则一致,最好不要与内置函数名相同 3.参数: 和C/C++不同,参数无需指定类型,直接交由解释器去判断: 对于number, str, tuple等不可变的对象,相当于传值,即是传递了拷贝 对于list,dict,set等可变对象,相当于引用传递,内部更改会影响外部的值 a.普通参数:

python几种装饰器的用法

用函数装饰函数 这种比较常见首先定义装饰器函数 def cache(func): data = {} @wraps(func) def wrapper(*args, **kwargs): key = f'{func.__name__}-{str(args)}-{str(kwargs)})' if key in data: result = data.get(key) print('cache') else: result = func(*args, **kwargs) data[key] = r

类装饰器

在理解类装饰器之前,先回忆一下有关装饰器的知识.装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的引用). __call__方法 一个对象是否可调用,看其中是否实现了__call__方法.例如,类的对象是不可调用的,因为其中没有实现__call__方法.如果我们在一个类中定义了__call__方法,那么这个类对象将变得可调用.只要某个对象定义了__call__()方法,那么这个对象就是callable的. 类中没有实现_

如何用python的装饰器定义一个像C++一样的强类型函数

Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.本文将介绍如何使用python的装饰器来定义一个像C++那样的强类型函数.接下去,先介绍python3中关于函数的定义. 0. python3中的函数定义 举个例子来说吧,比如如下的函数定义: 1 def fun(a:int, b=1, *c, d, e=2, **f) -> str: 2 pass 这里主要是说几点与python2中不同的点. 1)分号后面表示参数的annotation,这个

装饰器、生成器、迭代器、及python中内置函数的使用

一. 装饰器 1. 装饰器的概述 (1)概述:装饰器本质就是函数,主要用来装饰其他函数,为其他函数添加附加功能. (2)使用装饰器的原则 1)不能修改被装饰的函数的源代码 2)不能修改被装饰的函数的调用方式 (3)装饰器原理:函数即"变量".高阶函数.嵌套函数 2.使用装饰器的原因 (1)传统的多个函数模块修改需要同时修改多个函数.如果函数过多,则修改不方便. 如下,如果想要在每个函数中开头结尾分别输入内容,则需要在每个函数开头结尾加入需要输出的内容. def f1():     pr

python基础(3):函数对象、函数嵌套、名称空间与作用域、装饰器

函数对象 函数嵌套 名称空间与作用域 闭包函数 装饰器 练习 一 函数对象 #1 可以被引用 def max(x, y): return x if x > y else y func = max print(func(1, 2)) #2 可以当作参数传递 def max(x, y): return x if x > y else y def max_1(x, func): return func(x, 1) print(max_1(2, max)) #3 返回值可以是函数 #4 可以当作容器类