当前位置: 首页 > 科技观察

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

时间:2023-03-12 03:33:00 科技观察

@staticmethod和@classmethod在Python中被称为装饰器,用于修饰函数,相当于增加了一个额外的函数,不再像普通函数那样被实例化。@staticmethod和@classmethod实际上,@staticmethod和@classmethod都是用来声明静态方法的。它只是静态方法的声明和类方法的声明。静态方法:使用装饰器@staticmethod。没有self和cls参数。类方法:使用装饰器@classmethod。第一个参数是当前类的对象,通常是cls。为了方便大家理解两者的区别,下面的示例代码可以帮助大家找出区别:'''@作者:Runsen@微信公众号:Python之王@blog:https://blog.csdn.net/weixin_44510615@Date:2020/8/30'''classA():#classattributex=1@classmethoddefget_name(cls,name):print(cls.x)print('mynameis%s'%name)@staticmethoddefget_age(age):print(A.x)print(f'iam%syearsold'%age)if__name__=='__main__':A.get_name('Runsen')A.get_age(20)#实例对象也运行a=A()a.get_name('Runsen')a.get_age(20)#输出结果如下1mynameisRunsen1iam20yearsold1mynameisRunsen1iam20yearsold如果要在@staticmethod中调用该类的一些属性方法,只能直接类名。属性名或类名。方法名。并且由于@classmethod持有cls参数,可以通过cls调用类的属性、类的方法、实例化对象等,避免硬编码。@property@property可以将方法调用变成属性调用。例如:通常我们调用数据属性和方法,比如classSchool():name="家蹲大学"deftest(self):print("实例方法")@propertydeftest_pro(self):print("staticproperty")if__name__=="__main__":s=School()print(s.name)s.test()#输出结果如下家里和大学蹲的例子方法这时候用到了@preperty装饰器,可以进行方法更改作为属性调用。classSchool():name="家蹲大学"deftest(self):print("实例方法")@propertydeftest_pro(self):print("静态属性")if__name__=="__main__":s=School()print(s.name)#注意返回的函数一定不能加()s.test_pro#输出结果如下首页蹲大学静态属性从今天开始,在Python编程中,@property被广泛用于Python类的定义,它很常见。当你看到@property时,你的第一反应是:@property专门负责把一个方法变成一个同名的属性。本文已收录GitHub,传送门~[1],还有完整的大厂面试考点,欢迎Star。参考[1]传送门~:https://github.com/MaoliRUNsen/runsenlearnpy100