什么是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 yield使用方法示例
Dec 04 Python
python字符串连接的N种方式总结
Sep 17 Python
Python 通配符删除文件的实例
Apr 24 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
python try 异常处理(史上最全)
Mar 07 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
Python面向对象之Web静态服务器
Sep 03 Python
vue常用指令代码实例总结
Mar 16 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
简单谈谈Python面向对象的相关知识
Jun 28 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
在JavaScript中调用php程序
2009/03/09 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
jQuery对表单的操作代码集合
2011/04/06 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
python连接数据库的方法
2017/10/19 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
python字符串Intern机制详解
2019/07/01 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python获取栅格点和面值的实现
2020/03/10 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Python 如何创建一个线程池
2020/07/28 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
缓刑人员思想汇报
2014/10/11 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
党支部2014年度工作总结
2014/12/04 职场文书