1. 程式人生 > >python 類的裝飾器

python 類的裝飾器

bject bar set def color per ont 需要 添加

我們知道,在不改變原有代碼的基礎上,我們可以使用裝飾器為函數添加新的功能。同理,一切皆對象,我們也可以使用裝飾器為類添加類屬性。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 類的裝飾器