python 类的装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 类的装饰器相关的知识,希望对你有一定的参考价值。

我们知道,在不改变原有代码的基础上,我们可以使用装饰器为函数添加新的功能。同理,一切皆对象,我们也可以使用装饰器为类添加类属性。what?

  

def deco(obj):
    obj.x = 1
    obj.y = 2
    return obj


@deco  # Foo = deco(Foo)
class Foo:
    pass


print(Foo.__dict__)

上述的代码为Foo属性字典添加了x和y属性,但如果想添加‘name‘ = ‘harden‘呢,这需要更灵活的定义了。so

def deco(**kwargs):

    def wrapper(obj):
        for k, v in kwargs.items():
            setattr(obj, k, v)
        return obj
    return wrapper


@deco(x=1, y=2)
class Foo:
    pass

print(Foo.__dict__)
{__module__: __main__, __dict__: <attribute __dict__ of Foo objects>, __weakref__: <attribute __weakref__ of Foo objects>, __doc__: None, x: 1, y: 2}

我们再定义类Bar,

@deco(name=curry)
class Bar:
    pass

name属性也可以添加进去

以上是关于python 类的装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python装饰器

理解Python装饰器

Python进阶-----类的装饰器及应用

python 之装饰器

基于 Python 类的装饰器,带有可以装饰方法或函数的参数

python笔记第九天 装饰器