我对Python中的装饰器有些新意,并且正在使用一个简单的装饰器,它应该检查我的类的状态(当第一次实际调用其中一个dependending函数时执行一次操作)。我的问题是,我想让装饰器函数也知道self中的所有内容并将实际函数作为'argument'传递(?)
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) 如果我正确理解装饰器,或者?
所以我现在有点迷失了,我怎么能以一种简单的方式定义装饰器,它还知道类名称空间中的其他对象?
答案 0 :(得分:0)
根据@ aruisdante的建议,我设法让一位合适的装饰工作
def fooInit(func):
def _wrapped(self,*args, **kwargs):
if not self.__isFoo:
self.fooInit()
return func(self,*args, **kwargs)
return _wrapped
(在我班上定义)