什么是python类属性
首先我们来看一下属性的定义
属性的定义:python中的属性其实是普通方法的衍生。
操作类属性有三种方法:
1.使用@property装饰器操作类属性。
2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,del obj.age)
3.使用python内置函数操作属性。
属性存在的意义:
1、访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以代替其功能。
2、定义属性可以动态获取某个属性值,属性值由属性对应的方式实现,应用更灵活。
3、可以制定自己的属性规则,用于防止他人随意修改属性值。
下面详细介绍三种操作类属性的方法:
1.使用@property装饰器操作类属性。
定义时,在普通方法的基础上添加@property装饰器;属性仅有一个self参数,调用时无需括号;
优点:
1) @property装饰器可以实现其他语言所拥有的getter,setter和deleter的功能(例如实现获取,设置,删除隐藏的属性)
2) 通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。
实例代码1:
#encoding=utf-8 class Goods(): #新式类 @property def price(self): #查看属性值 print (’@property ’) @price.setter #修改、设置属性 def price(self, value): print (’@price.setter’ ) @price.deleter#删除属性 def price(self): print (’@price.deleter’) obj = Goods(50) obj.price# 自动执行 @property 修饰的 price 方法,并获取方法的返回值 obj.price = 2000 # 自动执行 @price.setter 修饰的 price 方法,并将2000赋值给方法的参数del obj.price # 自动执行 @price.deleter 修饰的 price 方法 结果输出:@property@price.setter@price.deleter
实例代码2:通过@property装饰器对属性的取值和赋值加以控制
class Goods(object): def __init__(self): self.value=50 @property def price(self): # 查看属性 return self.value @price.setter # 添加或设置属性(属性名.setter) def price(self, value): if value >=50 and value<=100: #对属性的取值和赋值加以控制 self.value=value print (self.value) else: print ('请输入一个50到100之间的数!') @price.deleter # 删除属性(属性名.deleter) 注意:属性一旦删除,就无法设置和获取 def price(self): del self.value print ('price is deleted!') obj = Goods()print (obj.price) # 自动执行 @property 修饰的 price 方法,并获取方法的返回值obj.price=106 # 自动执行 @price.setter 修饰的 price 方法,并将106 赋值给方法del obj.price # 自动执行 @price.deleter 修饰的 price 方法结果输出:50请输入一个50到100之间的数!price is deleted!
实例扩展:
class Dog(object): name = ’dog’ def init(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类属性是什么内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
1. IDEA 使用mybatis插件Free Mybatis plugin的步骤(推荐)2. 解决idea使用maven编译正常但是运行项目时却提示很多jar包找不到的问题3. Hadoop 使用IntelliJ IDEA 进行远程调试代码的配置方法4. idea的easyCode的 MybatisPlus模板的配置详解5. 关于IDEA git 只有Commit没有Push的问题6. 一文读懂IDEA里面的Artifact到底是什么7. Intellij IDEA 2019 最新乱码问题及解决必杀技(必看篇)8. 一篇文章带你解决 IDEA 每次新建项目 maven home directory 总是改变的问题9. IDEA 使用 SpotBugs 找出你代码中的bug问题10. Java FileInputStream与FileOutputStream使用详解

网公网安备