什么是python类属性
首先我们来看一下属性的定义
属性的定义:python中的属性其实是普通方法的衍生。
操作类属性有三种方法:
1.使用@property装饰器操作类属性。
2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,delobj.age)
3.使用python内置函数操作属性。
属性存在的意义:
1、访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以代替其功能。
2、定义属性可以动态获取某个属性值,属性值由属性对应的方式实现,应用更灵活。
3、可以制定自己的属性规则,用于防止他人随意修改属性值。
下面详细介绍三种操作类属性的方法:
1.使用@property装饰器操作类属性。
定义时,在普通方法的基础上添加@property装饰器;属性仅有一个self参数,调用时无需括号;
优点:
1)@property装饰器可以实现其他语言所拥有的getter,setter和deleter的功能(例如实现获取,设置,删除隐藏的属性)
2)通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。
实例代码1:
#encoding=utf-8 classGoods():#新式类 @property defprice(self):#查看属性值 print('@property') @price.setter#修改、设置属性 defprice(self,value): print('@price.setter') @price.deleter#删除属性 defprice(self): print('@price.deleter') obj=Goods(50) obj.price#自动执行@property修饰的price方法,并获取方法的返回值 obj.price=2000#自动执行@price.setter修饰的price方法,并将2000赋值给方法的参数 delobj.price#自动执行@price.deleter修饰的price方法 结果输出: @property @price.setter @price.deleter
实例代码2:通过@property装饰器对属性的取值和赋值加以控制
classGoods(object): def__init__(self): self.value=50 @property defprice(self):#查看属性 returnself.value @price.setter#添加或设置属性(属性名.setter) defprice(self,value): ifvalue>=50andvalue<=100:#对属性的取值和赋值加以控制 self.value=value print(self.value) else: print("请输入一个50到100之间的数!") @price.deleter#删除属性(属性名.deleter)注意:属性一旦删除,就无法设置和获取 defprice(self): delself.value print("priceisdeleted!") obj=Goods() print(obj.price)#自动执行@property修饰的price方法,并获取方法的返回值 obj.price=106#自动执行@price.setter修饰的price方法,并将106赋值给方法 delobj.price#自动执行@price.deleter修饰的price方法 结果输出: 50 请输入一个50到100之间的数! priceisdeleted!
实例扩展:
classDog(object): name='dog' definit(self): self.age=18 d1=Dog() d2=Dog()
这里有两个实例d1,d2吧。
d1.name#输出dogd2.name#输出dogd1.name='abc' d1.name#输出abcd2.name#输出dogDog.name#输出dog
原因是d1.name输出dog不是因为这个实例共享了类属性,而是因为这个实例没有dog属性,所以python查找了类属性。但是一旦你修改了d1.name相当于给d1实例绑定了name属性之后,d1.name就与类属性无关了。既然这样就谈不上实例之间共享类属性了,因为只要一赋值,就相当于绑定了属性,则上述d1.name的含义和d2.name的含义就不同了,它们的值也不同,很明显它们的数据没有共享。
到此这篇关于什么是python类属性的文章就介绍到这了,更多相关python类属性是什么内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!