python 類的裝飾器
阿新 • • 發佈:2018-12-02
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 類的裝飾器