#coding=UTF-8
import logging
# from typing import List, Dict, Any, Callable
from tensorflow.python.framework import device
import functools
class FuncWrapper(object):
def __init__(self, func):
self.func = func
def __str__(self):
return "<Func Wrapper %s>" % self.func
def wrapper(self, name):
def inner(*args, **kwargs):
print("inner begin func:", name)
w = self.func(*args)
print("inner end")
return w
return inner
def test_func(func):
return functools.wraps(func)(FuncWrapper(func))
@test_func
def test(a, b):
return a+b
def test2(a, b, c):
return a+b+c
class TB(object):
def __init__(self, func):
print("TB __init__")
self.func = func
def wrapper(self, name):
@functools.wraps(self.func)
def inner(*args, **kwargs):
return self.func(*args)
return inner
def wrapper(func):
# return TB(func)
return functools.wraps(func)(TB(func))
@wrapper
def test3(a, b, c):
return a+b+c
# functools.wraps() 返回 update_wrapper
# update_wrapper 主要的工作是需要设置attr
# setattr(wrapper, attr, getattr(wrapped, attr))
# c = functools.wraps(test2)(FuncWrapper(test2))
# d = functools.wraps(test2)(TB(test2))
# k = TB(test2)
# print("d:", d.wrapper("12")(1,4,2))
# print("k:", k.wrapper("12")(1,4,2))
# # d(13)
# print("t2:", c.wrapper("12")(12, 13, 16))
print("w:", test3) # class TB object
k = test3.wrapper # bound method TB.wrapper
print("k:", k)
e = test3.wrapper("12")(1,2,3)
print("e:", e)
python function wrapper
最新推荐文章于 2024-06-19 08:48:18 发布