相关疑难解决方法(0)

Python装饰,自我混淆了

我是Python修饰者的新手(哇,很棒的功能!),我无法让下面的代码工作,因为self参数混淆了.

#this is the decorator
class cacher(object):

    def __init__(self, f):
        self.f = f
        self.cache = {}

    def __call__(self, *args):
        fname = self.f.__name__
        if (fname not in self.cache):
            self.cache[fname] = self.f(self,*args)
        else:
            print "using cache"
        return self.cache[fname]

class Session(p.Session):

    def __init__(self, user, passw):
        self.pl = p.Session(user, passw)

    @cacher
    def get_something(self):
        print "get_something called with self = %s "% self
        return self.pl.get_something()

s = Session(u,p)
s.get_something()
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

get_something called with self = <__main__.cacher object at 0x020870F0> 
Traceback:
...
AttributeError: 'cacher' …
Run Code Online (Sandbox Code Playgroud)

python python-decorators

17
推荐指数
1
解决办法
5355
查看次数

标签 统计

python ×1

python-decorators ×1