【发布时间】:2021-09-17 13:14:58
【问题描述】:
假设我有一个简单的装饰器,以及一个类方法和一个函数,我都用这个装饰器装饰:
import functools
def decorator(func):
@functools.wraps(func)
def call(*args):
print(args)
func(*args)
return call
class cls:
@decorator
def meth(self, a):
pass
@decorator
def func(c):
pass
cls().meth("a")
func("c")
我得到以下输出:
(<__main__.cls object at 0x7f4665c50130>, 'a')
('c',)
但是我想在方法上使用装饰器时去掉self参数,这样输出就变成了:
('a',)
('c',)
但是,如果我只是添加args.pop(0),我将删除第一个参数,即使它不是self。如果它是self,我怎样才能只删除第一个参数?
注意:我使用inspect 阅读了一些带有长代码的解决方案 - 但在这种伟大且易于使用的编程语言中必须有更短、更简单的方法?
编辑:使用@staticmethod 对我来说不是一个选项,因为我需要方法本身中的self 参数。我只是不希望它被打印。
【问题讨论】:
-
@staticmethod装饰器呢? -
@May.D 不,这不是我的选择;另外我没有看到它的好处 - 我编辑了我的问题。
标签: python python-3.x object decorator self