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

创新互联建站专业为企业提供善右网站建设、善右做网站、善右网站设计、善右网站制作等企业网站建设、网页设计与制作、善右企业网站模板建站服务,十余年善右做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
@staticmethod和@classmethod
其实@staticmethod和@classmethod都是用来声明静态方法的。只不过一个声明静态方法,一个声明类方法。
静态方法:使用装饰器@staticmethod。没有self和cls参数。
类方法:使用装饰器@classmethod。第一个参数为当前类的对象,通常为cls。
为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别:
- '''
 - @Author:Runsen
 - @微信公众号:Python之王
 - @博客:https://blog.csdn.net/weixin_44510615
 - @Date:2020/8/30
 - '''
 - class A():
 - # 类的属性
 - x = 1
 - @classmethod
 - def get_name(cls, name):
 - print(cls.x)
 - print('my name is %s' % name)
 - @staticmethod
 - def get_age(age):
 - print(A.x)
 - print(f'i am %s years old' % age)
 - if __name__ == '__main__':
 - A.get_name('Runsen')
 - A.get_age(20)
 - # 实例对象同样运行
 - a = A()
 - a.get_name('Runsen')
 - a.get_age(20)
 - #输出如下
 - 1
 - my name is Runsen
 - 1
 - i am 20 years old
 - 1
 - my name is Runsen
 - 1
 - i am 20 years old
 
如果在 @staticmethod 中要调用到这个类的一些属性方法,只能直接 类名.属性名或 类名.方法名。而 @classmethod 因为持有cls参数,可以通过cls来调用类的属性,类的方法,实例化对象等,避免硬编码。
@property
@property可以将一个方法的调用变成属性调用。举例说明:平时我们调用数据属性和方法,是这样的
- class School():
 - name = "家里蹲大学"
 - def test(self):
 - print("实例方法")
 - @property
 - def test_pro(self):
 - print("静态属性")
 - if __name__ == "__main__":
 - s = School()
 - print(s.name)
 - s.test()
 - # 输出如下
 - 家里蹲大学
 - 实例方法
 
这时就要用到@preperty装饰器,该装饰器能够让一个方法变成属性调用。
- class School():
 - name = "家里蹲大学"
 - def test(self):
 - print("实例方法")
 - @property
 - def test_pro(self):
 - print("静态属性")
 - if __name__ == "__main__":
 - s = School()
 - print(s.name)
 - # 注意返回的函数 千万别加()
 - s.test_pro
 - # 输出如下
 - 家里蹲大学
 - 静态属性
 
从今天以后,在Python编程中,@property广泛应用在Python类的定义中非常常见。你一看到@property,第一反应就是:@property专门负责把一个方法变成同名属性的。
本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。
Reference
 [1]传送门~:
 https://github.com/MaoliRUNsen/runsenlearnpy100
                当前名称:@Staticmethod、@Classmethod和@Property类装饰器
                
                文章URL:http://www.csdahua.cn/qtweb/news24/216824.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网