什么是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 写的一个爬虫程序源码
Feb 28 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
python如何对实例属性进行类型检查
Mar 20 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
python变量命名的7条建议
Jul 04 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
Python存储读取HDF5文件代码解析
Nov 25 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
如何开发一个虚拟域名系统
2006/10/09 PHP
php模板中出现空行解决方法
2011/03/08 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
js window.onload 加载多个函数的方法
2009/11/02 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
深入讲解Python编程中的字符串
2015/10/14 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
灰雀教学反思
2014/04/28 职场文书
通过Python把学姐照片做成拼图游戏
2022/02/15 Python