什么是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支持断点续传的多线程下载示例
Jan 16 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
python pandas修改列属性的方法详解
Jun 09 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
python实现泊松图像融合
Jul 26 Python
python实现Flappy Bird源码
Dec 24 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
Python 没有main函数的原因
Jul 10 Python
如何使用Django Admin管理后台导入CSV
Nov 06 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
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
原生js实现图片轮播特效
2015/12/18 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
解析python的局部变量和全局变量
2019/08/15 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
Why we need EJB
2016/10/20 面试题
啤酒销售实习自我鉴定
2013/09/24 职场文书
便利店促销方案
2014/02/20 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers