类里面的 @staticmethod,@classmethod,@property
关于@staticmethod:
返回函数的静态方法,该方法不强制要求传递参数
文档里面的解释是:静态方法不会收到隐式的第一个参数
@staticmethod 静态方法只是名义上归属类管理,但是不能使用类变量和实例变量,是类的工具包
该函数不传入 self 或者 cls
class demo(object):
方法加入了 @staticmethod 就不需要加上参数 self 了,上图如果去掉 @staticmethod 就会报错
使用staticmethod
的原因是如果您有一些可以作为独立函数编写的东西(不是任何类的一部分),但是您希望将其保留在类中,因为它在某种程度上与类相关。(例如,它可以是一个不需要来自类的任何信息的函数,但是它的行为是特定于类的,因此子类可能希望重写它。)在许多情况下,编写一些与独立函数而不是staticmethod一样有意义
关于@classmethod
classmethod修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的cls 参数,可以用来调用类的属性,类的方法,实例化对象等
class demo(object):
bar = 1
def func1(self):
print "这是function1"
关于@property
可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改
class demo(object):
def __init__(self, value):
self.data1 = value