繁体   English   中英

如何在python中的面向对象程序上实现装饰器

[英]How to implement decorator on object oriented program in python

对装饰有疑问。 我试图理解python中的装饰器概念,但被卡在类中使用装饰器。 with_class.py

class decorate:
      def __init__(self,f):
          self.f = f

      def __call__(self)
          self.f()
@decorate
def foo():
    print "inside foo"
foo()

我将整个代码放在单个.py文件中,并按预期执行。 输出:在foo内部

但是后来我尝试在另一个.py文件中为类装饰创建一个对象,并尝试执行以获取相同的输出。 在第一个.py文件中注释foo() ,并在第二个.py文件中使用以下代码。

use_class.py

import with_class
a = with_class.decorate()

但这会TypeError: __init__ takes exactly 2 arguments(1 given)错误TypeError: __init__ takes exactly 2 arguments(1 given) 可以预期,在调用__init__我们应该提供2个参数。 但是没有获得在use_class.py上执行foo方法所要传递的use_class.py 再次,我尝试通过从__init__删除f来使用__call__(self,f) ,但它也会出错。 看来我没有领会这个概念。

什么

@decorate
def foo():
    print "inside foo"

做相当于

def foo():
    print "inside foo"

foo = decorate(foo)

所以foowith_class模块中装饰函数(实际上是class decorate的对象)绑定到的with_class 然后从use_class.py

import with_class

a = with_class.foo()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM