1、@property的使用
@property
是python的一种装饰器,是用来修饰方法的。@property
是把类内方法当成属性来使用,使用@property
装饰器来创建只读属性,@property
装饰器会将方法转换为相同名称的只读属性,必须要有返回值,相当于getter
;
只读属性就是只有@func.getter
,没有定义@func.setter
。
class Car: def __init__(self, name, price): self._name = name self._price = price @property def car_name(self): return self._name # car_name可以读写的属性 @car_name.setter def car_name(self, value): self._name = value # car_price是只读属性 @property def car_price(self): return str(self._price) + '万'
2、@staticmethod的使用
@staticmethod 静态方法不能使用类变量和实例变量,装饰器的函数不传入self或者cls,则不能访问类属性和实例属性。 class cal: cal_name = '计算器' def __init__(self,x,y): self.x = x self.y = y @property #在cal_add函数前加上@property,使得该函数可直接调用,封装起来 def cal_add(self): return self.x + self.y @classmethod #在cal_info函数前加上@classmethon,则该函数变为类方法,该函数只能访问到类的数据属性,不能获取实例的数据属性 def cal_info(cls): #python自动传入位置参数cls就是类本身 print('这是一个%s'%cls.cal_name) #cls.cal_name调用类自己的数据属性 @staticmethod #静态方法 类或实例均可调用 def cal_test(a,b,c): #改静态方法函数里不传入self 或 cls print(a,b,c)
3、@classmethod的使用
@classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。 class A(object): bar = 1 def foo(self): print 'foo' @staticmethod def static_foo(): print 'static_foo' print A.bar @classmethod def class_foo(cls): print 'class_foo' print cls.bar cls().foo() A.static_foo() A.class_foo()
4、@staticmethod和@classmethod区别