在Python类中如何定义和使用装饰器?
PHP中文网
PHP中文网 2017-04-17 13:41:29
[Python讨论组]

是这样的,我封装了一个类,然后许多类中的方法要加一些相同的功能(这些功能都是基于这个类的),我知道装饰器能简化这个过程,但google了许多,没有发现在类中如何实现装饰器.

比如:

class Test(object):
    self.i = 1
    def fun(self):
        print 'hehe'

我想要在一些方法前加入特定改变self.i的方法并把参数传进去,类似这样:


def decorator(self, args): def _deco(func): def __deco(): self.i = args func() return __deco return _deco @decorator(self, args) def fun(self): print 'hehe'

这样我就可以把self.i改成args了.但是在类中这种方法不管用~

所以问题来了:

  1. 类中可不可以使用并定义装饰器,如何使用?
  2. 如果不能使用可以用什么方法代替?

非常感谢

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
高洛峰

看着问题有点绕,肯定是能做到的。

我理解题主大概是想要这样的效果:

class Foo(object):
    @decorator(123)
    def bar(self):
        # 输出 123
        print('i:', self.i)

def decorator(args):
    def _deco(func):
        def _func(self):
            # 注意 self 是作为参数传进来的
            self.i = args
            func(self)
        return _func

    return _deco
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号