[英]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)
所以foo
是with_class
模块中装饰函数(实际上是class decorate
的对象)绑定到的with_class
。 然后从use_class.py
import with_class
a = with_class.foo()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.