什么是python类属性


Posted in Python onJune 10, 2020

首先我们来看一下属性的定义

属性的定义: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类属性是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python获取图片颜色信息的方法
Mar 18 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
Zabbix实现微信报警功能
Oct 09 Python
python分布式环境下的限流器的示例
Oct 26 Python
使用C++扩展Python的功能详解
Jan 12 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
python实现黑客字幕雨效果
Jun 21 Python
Python绘制的二项分布概率图示例
Aug 22 Python
在Python中使用Neo4j的方法
Mar 14 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 #Python
浅谈Python中的模块
Jun 10 #Python
keras多显卡训练方式
Jun 10 #Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 #Python
keras 多gpu并行运行案例
Jun 10 #Python
Keras自定义IOU方式
Jun 10 #Python
Python实现在线批量美颜功能过程解析
Jun 10 #Python
You might like
制作美丽的拉花
2021/03/03 冲泡冲煮
同时提取多条新闻中的文本一例
2006/10/09 PHP
php 变量定义方法
2009/06/14 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
JavaScript 程序编码规范
2010/11/23 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Python中逗号的三种作用实例分析
2015/06/08 Python
Sanic框架应用部署方法详解
2018/07/18 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
西尔斯百货官网:Sears
2016/09/06 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
十佳班主任事迹材料
2014/01/18 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
远程教育学习心得体会
2016/01/23 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技