gpt4 book ai didi

python - 类方法和函数的装饰器

转载 作者:行者123 更新时间:2023-12-05 00:56:36 25 4
gpt4 key购买 nike

我有装修工

def deco(func):
def inner(params):
#< DO STUFF WITH func >
return inner

和一个基类
class GenericClass:
def __init__(self,value):
self.value = value
def method(self,params):
print 'NOT IMPLEMENTED YET'
def other_method(self):
print 'GOOD TO GO'

我希望能够在 GenericClass 的子类上装饰“方法”方法,例如检查输入/输出或处理异常(方法“方法”将被覆盖)

我想要做的是像......
class ChildClass(GenericClass):
@deco
def method(self,params):
#< NEW METHOD >

我不是专业的 Python 开发人员,该级别的所有文档都令人困惑(即元类、装饰器中的微妙之处、 __call__ 方法等),而且我没有在 SO 上找到解决方案。

最佳答案

知道了。您基本上是在问如何编写一个可以应用于函数和方法的装饰器。这是可能的:

def deco(func):
def inner(*args):
print('DECORATED: args={}'.format(args))
func(*args)
return inner

class Class:
@deco
def method(self, param): print('PARAM is {}'.format(param))

@deco
def func(a, b, c): print('{} {} {}'.format(a, b, c))

Class().method('X')

func(1, 2, 3)

输出:
DECORATED: args=(<__main__.Class instance at 0x7f740c6297a0>, 'X')
PARAM is X
DECORATED: args=(1, 2, 3)
1 2 3

附言

一年后,我在这里找到了一篇有用的帖子(8 年前有人问过): Using the same decorator (with arguments) with functions and methods .如果您关心装饰函数的实际参数,则那里描述的方法将很有用。

关于python - 类方法和函数的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com