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

 @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

当前题目:@Staticmethod、@Classmethod和@Property类装饰器
标题链接:http://www.shufengxianlan.com/qtweb/news24/216824.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联