9.10 为类和静态方法提供装饰器

    给类或静态方法提供装饰器是很简单的,不过要确保装饰器在 或 之前。例如:

    装饰后的类和静态方法可正常工作,只不过增加了额外的计时功能:

    那么你调用这个静态方法时就会报错:

    问题在于 和 @staticmethod 实际上并不会创建可直接调用的对象,而是创建特殊的描述器对象(参考8.9小节)。因此当你试着在其他装饰器中将它们当做函数来使用时就会出错。确保这种装饰器出现在装饰器链中的第一个位置可以修复这个问题。

    在这段代码中, 跟 两者的顺序是有讲究的,如果你调换它们的顺序就会出错。

    原文: