检索方法所属的对象

  • 本文关键字:对象 方法 检索 python
  • 更新时间 :
  • 英文 :

def decorator(func):
pass
class DummyClass:
@decorator
def func(self):
pass
dummy = DummyClass()

如何在装饰器中检索DummyClass对象,或者如何将该对象作为参数发送给装饰器本身?

您的函数decorator实际上不是一个装饰器。在简单的情况下,Python中的装饰器是一个返回另一个函数的函数。你的"decorator">

装饰器语法导致旧函数(被装饰的函数)被新函数(装饰器返回的函数)所替换。

我认为,你要做的是用另一个成员函数代替一个成员函数。所有成员函数都至少接受一个参数,通常命名为"self."它指的是对象本身。因此,返回的函数应该有一个参数。不管你把它命名为"自我"都没关系。与否。如果你在成员函数上使用该装饰器,Python将自动提供第一个参数,该参数将相当于"self.">

下面是一个示例,展示了这是如何工作的:

def decorator(f):
def f1(arg0):
print("f1")
f(arg0)
print(arg0.value)
print(arg0.__class__)
return f1
class DummyClass:
def __init__(self):
self.value = 42

@decorator
def func(self):
print("func")

@decorator
def func2(self):
print("func2")
dummy = DummyClass()
dummy.func()
dummy.func2()

这个打印:

f1
func
42
<class '__main__.DummyClass'>
f1
func2
42
<class '__main__.DummyClass'>

可以看到,您使用标准的点语法访问DummyClass的成员对象。修饰函数的第一个参数是类"dummyclass"的实例。该示例还展示了如何使用相同的装饰器装饰多个函数。

你也可以在另一个类中使用相同的装饰器,只要该类定义了一个名为"value."的成员变量如果没有,表达式arg0.value将引发AttributeError。

最新更新