什么是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中MYSQLdb出现乱码的解决方法
Oct 11 Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
Python实现单词翻译功能
Jun 06 Python
python实现图像识别功能
Jan 29 Python
python生成带有表格的图片实例
Feb 03 Python
django之自定义软删除Model的方法
Aug 14 Python
Python如何计算语句执行时间
Nov 22 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
python 实现IP子网计算
Feb 18 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python实现小球弹跳效果
2019/05/10 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
我的求职择业计划书
2014/04/04 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
详解Python flask的前后端交互
2022/03/31 Python
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技