使用裝飾器修改類定義

2022-08-27 02:42:10 字數 704 閱讀 3944

修改類定義可以通過單繼承,多繼承(mixin),以及元類等。其實,裝飾器也可以修改類定義,並且和上述提到的方案相比,更簡潔直觀,效能也更強。

如下:

def log_getattribute(cls):

# get the original implementation

orig_getattribute = cls.__getattribute__

# make a new definition

def new_getattribute(self, name):

print('getting', name)

return orig_getattribute(self, name)

# attach to the class and return

cls.__getattribute__ = new_getattribute

return cls

@log_getattribute

class a:

def __init__(self, x):

self.x = x

def spam(self):

pass

>>> a = a(42)

>>> print(a.x)

getting x

42>>> a.spam()

getting spam

函式裝飾器 類裝飾器

一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...

python 裝飾器 函式裝飾器 類裝飾器

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...