开发手册 欢迎您!
软件开发者资料库

Python内置装饰器(@property、@staticmethod、@classmethod)使用及示例代码

本文主要介绍Python中,内置装饰器@property、@staticmethod、@classmethod的使用方法,以及相关的示例代码。

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区别

相关文档Python中@staticmethod和@classmethod区别及使用示例代码

Python3通过装饰器来创建property