@Staticmethod、@Classmethod和@Property类装饰器

开发 后端
@staticmethod 与 @classmethod在Python中称为 装饰器,用来修饰函数,相当于添加一个额外的功能,不再像普通函数那样进行实例化。

[[352589]]

 @staticmethod 与 @classmethod在Python中称为 装饰器,用来修饰函数,相当于添加一个额外的功能,不再像普通函数那样进行实例化。

@staticmethod和@classmethod

其实@staticmethod和@classmethod都是用来声明静态方法的。只不过一个声明静态方法,一个声明类方法。

静态方法:使用装饰器@staticmethod。没有self和cls参数。

类方法:使用装饰器@classmethod。第一个参数为当前类的对象,通常为cls。

为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别:

  1. ''
  2. @Author:Runsen 
  3. @微信公众号:Python之王 
  4. @博客:https://blog.csdn.net/weixin_44510615 
  5. @Date:2020/8/30 
  6. ''
  7. class A(): 
  8.     # 类的属性 
  9.     x = 1 
  10.  
  11.     @classmethod 
  12.     def get_name(cls, name): 
  13.         print(cls.x)   
  14.         print('my name is %s' % name
  15.  
  16.     @staticmethod 
  17.     def get_age(age): 
  18.         print(A.x) 
  19.         print(f'i am %s years old' % age) 
  20.  
  21. if __name__ == '__main__'
  22.     A.get_name('Runsen')   
  23.     A.get_age(20) 
  24.      
  25.     # 实例对象同样运行 
  26.     a = A() 
  27.     a.get_name('Runsen'
  28.     a.get_age(20) 
  29.  
  30.      
  31. #输出如下 
  32. my name is Runsen 
  33. i am 20 years old 
  34. my name is Runsen 
  35. i am 20 years old 

如果在 @staticmethod 中要调用到这个类的一些属性方法,只能直接 类名.属性名或 类名.方法名。而 @classmethod 因为持有cls参数,可以通过cls来调用类的属性,类的方法,实例化对象等,避免硬编码。

@property

@property可以将一个方法的调用变成属性调用。举例说明:平时我们调用数据属性和方法,是这样的

  1. class School(): 
  2.     name = "家里蹲大学" 
  3.  
  4.     def test(self): 
  5.         print("实例方法"
  6.  
  7.     @property 
  8.     def test_pro(self): 
  9.         print("静态属性"
  10.  
  11. if __name__ == "__main__"
  12.     s = School() 
  13.     print(s.name
  14.     s.test() 
  15.      
  16.  # 输出如下    
  17.  家里蹲大学 
  18.  实例方法 

这时就要用到@preperty装饰器,该装饰器能够让一个方法变成属性调用。

  1. class School(): 
  2.     name = "家里蹲大学" 
  3.  
  4.     def test(self): 
  5.         print("实例方法"
  6.  
  7.     @property 
  8.     def test_pro(self): 
  9.         print("静态属性"
  10.  
  11. if __name__ == "__main__"
  12.     s = School() 
  13.     print(s.name
  14.     # 注意返回的函数 千万别加() 
  15.     s.test_pro 
  16.      
  17.  # 输出如下   
  18.  家里蹲大学 
  19.  静态属性 

从今天以后,在Python编程中,@property广泛应用在Python类的定义中非常常见。你一看到@property,第一反应就是:@property专门负责把一个方法变成同名属性的。

本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

Reference
[1]传送门~:
https://github.com/MaoliRUNsen/runsenlearnpy100

 

责任编辑:姜华 来源: Python之王
相关推荐

2017-07-20 16:02:27

Python编程

2021-12-27 07:10:26

ClassmethodStaticmetho函数

2021-04-11 08:21:20

Python@property装饰器

2021-04-15 15:20:46

PythonProperty装饰器

2023-02-07 07:47:52

Python装饰器函数

2010-02-01 17:50:32

Python装饰器

2024-02-26 00:00:00

TypeScript装饰器decorators

2022-10-24 07:31:53

Python编程装饰器

2016-11-01 09:24:38

Python装饰器

2023-08-07 16:07:42

2022-09-19 23:04:08

Python装饰器语言

2021-02-01 14:17:53

装饰器外层函数里层函数

2017-07-07 17:01:32

装饰器代码Python

2021-06-01 07:19:58

Python函数装饰器

2023-09-04 13:14:00

装饰器设计模式

2023-12-11 15:51:00

Python装饰器代码

2022-09-26 09:02:54

TS 装饰器TypeScript

2020-04-13 16:05:25

JS装饰器前端

2015-08-10 10:58:53

dompropertyattribute

2013-05-02 10:51:17

iOS开发Objective-C@property
点赞
收藏

51CTO技术栈公众号