0
我對Python中的裝飾器有些新鮮,並且正在用一個簡單的裝飾器來構造,這應該會檢查我的類的狀態(當一個依賴函數是實際上是第一次要求)。我的問題是,我想讓裝飾功能也瞭解一下自己的一切,並通過實際的功能爲「參數」(?)python:簡單的裝飾器函數的類名稱空間
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) 如果我理解正確的裝飾,還是?
所以我現在有點迷路了,我怎樣才能以簡單的方式定義裝飾器,它也知道類命名空間中的其他對象?
可能重複://計算器.com/questions/4923706/decorating-a-class-method-after-property) – aruisdante 2014-10-17 15:45:09
這實際上與你裝飾物業的事實有關。查看鏈接的副本。 – aruisdante 2014-10-17 15:45:28
並且記住,你對裝飾器的參數實際上是''(func,* args,** kwargs)'',其中''args [0]''將會是'self''。一般來說,[裝飾器函數](http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/)本身沒有被定義爲類名稱空間的一部分。 – aruisdante 2014-10-17 15:47:34