Python有三个内置装饰器:
- @property 用来修饰类属性
- @staticmethod 用来修饰类静态方法
- @classmethod 用来修饰类方法
@property - 类属性装饰器
@property 用来修饰类中的方法,被修饰的类方法,会被当成类属性使用,同时为属性自动添加getter和setter操作
把一个类似getter方法变成属性,只需要在这个方法前面加上@property。
- 使用@property综合示例
现有个矩形类,可以设置其宽、高,可以求矩形面积、矩形周长。
Java的惯用做法是定义私有的width、height属性,然后定义公有方法getWidth()、getHeight()、getArea()、getPerimeter(),对应的Python实现如下:
![2345b1c5bb517a90ebc0caba76e2b1cf.png](https://i-blog.csdnimg.cn/blog_migrate/05b247a386aa02b6416e49d2e17ec7bf.jpeg)
以上这种写法,比较中规中矩,有Java程序猿的影子,很不pythonic!
使用Python内置装饰器@property 重写实现如下:
![298c13b5a757d14d27bd60afc64b4909.png](https://i-blog.csdnimg.cn/blog_migrate/6423d3b28d5ec5b7d8aab0b92f36f5c4.jpeg)
该实现是不是很pythonic,同时使用起来更加简单!
静态方法装饰器 & 类方法装饰器
- @staticmethod - 静态方法装饰器
该装饰器能将类中定义的方法变成静态方法,静态方法不需要传入self参数,基本和全局函数差不多;能够通过类或类的实例对象来调用静态方法。
- @classmethod - 类方法装饰器
该装饰器能将类中定义的方法变成类方法,类方法的第一个参数必须是cls,cls是对该类的引用,通过cls对类的属性进行访问;能够通过类或类的实例对象来调用类方法。
以下是内置装饰器staticmethod和classmethod使用示例:
![a109a3aef1b0b7af7f0720a9d6b43c0a.png](https://i-blog.csdnimg.cn/blog_migrate/ae57cf7a43738cec538921e30364ecba.jpeg)
静态方法和类方法是为类提供的操作方法,尽管可以通过类对象调用静态方法和类方法,但是不建议这么做!
最后
接下来会有更加精彩的内容,不想错过的话,可以关注我,第一时间获取更新!
最后,投币收藏转发来一波,我们下期不见不散~