python:简单装饰器函数的类命名空间
我对Python中的装饰器还不是很熟悉,正在尝试写一个简单的装饰器。这个装饰器的目的是检查我的类的状态(也就是说,当依赖的某个函数第一次被调用时,执行某个操作)。我的问题是,我想让装饰器函数也能知道self里的所有内容,并把实际的函数作为“参数”传递进去。
class myClass(object):
__init__(self):
self.__isFoo = False
self.__baz = 0
def doFoo(self):
...
self.__isFoo = True
def fooInit(self,func):
if not self.__isFoo:
self.doFoo()
return func
@property
@fooInit
def getBaz(self):
return self.__baz
但是,这样做的时候,我遇到了一个错误:
myObj = myClass()
myObj.getBaz
~~> TypeError: fooInit() takes exactly 2 arguments (1 given)
这个错误我有点明白,因为它实际上是 self.fooinit( self.getBaz ) 如果我理解装饰器的话,是这样吗?
所以我现在有点迷茫,不知道该怎么简单地定义这个装饰器,让它也能知道类中的其他对象。
1 个回答
1
根据@aruisdante的建议,我成功地实现了一个正确的装饰器。
def fooInit(func):
def _wrapped(self,*args, **kwargs):
if not self.__isFoo:
self.fooInit()
return func(self,*args, **kwargs)
return _wrapped
(这个装饰器是在我的类里面定义的)