@classmethod, @staticmethod, @property这些都是什么? -------------------------------------------------------- 这些都是修饰类的方法的装饰器函数,加上@就可以修饰方法。 * @classmethod 将修饰的函数重新修改为类方法。函数第一个参数为类cls * @staticmethod 将修饰的函数改为静态方法。不能被类的实例所调用。 * @property 修饰方法可以改为一个属性,通过函数访问,但实际调用时和成员变量类似。 什么是装饰器及装饰器函数 '''''''''''''''''''''''''''''' 装饰器函数用于修改被装饰函数的行为,也就是修改其他函数的功能的函数。例如 通用的给每个函数增加log功能就适合用装饰器函数。 例如hello是一个函数,有很多地方在调用,调用的方法不变,但如何在调用时, 增加一个输出语句呢,并且还有很多类似hello的函数需要增加输出语句。 这就要求不能修改hello本身的代码。 装饰器可以实现这个功能,装饰器内部定义了一个函数,这个内部函数内容 是输出一个语句,并返回本装饰的函数调用结果。装饰器函数仅返回内部函数。 在被装饰的函数上一行之处增加@并紧跟装饰器函数。 被装饰的函数调用方法不变,但函数行为已经方法改变,增加了一个输出语句。 例如::: from time import ctime def deco_log(func): def wrappedFunc(name): print( '[%s] %s() called' % (ctime(), func.__name__)) return func(name) return wrappedFunc @deco_log def hello(name="word"): print("hello ", name) hello("china") deco_log是一个装饰器函数,功能是将所修饰的函数增加一个调用输出。 装饰器是一种修改函数的一种便捷方式。 装饰器本质上就是一个函数,这个函数 接受其他的函数作为参数, 并将其以一个新的修改后的函数进行调用。主要应用 于增加日志,在通用框架下调用,性能测试等等。 装饰器的作用就是为已经存在的函数添加的额外功能,就像家庭装修一样。