什么是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 itertools模块详解
May 09 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
python 内置函数filter
Jun 01 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
Python OpenCV获取视频的方法
Feb 28 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
Python一键安装全部依赖包的方法
Aug 12 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
面试常见的js算法题
2017/03/23 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
Python发送email的3种方法
2015/04/28 Python
Python的gevent框架的入门教程
2015/04/29 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
介绍一下RMI的基本概念
2016/12/17 面试题
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
幼儿如何来做好自我评价
2013/11/05 职场文书
英语演讲开场白
2015/05/29 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书