什么是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实现TCP服务器端与客户端的方法详解
Apr 30 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
python爬取个性签名的方法
Jun 17 Python
Python内存读写操作示例
Jul 18 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
Python类中方法getitem和getattr详解
Aug 30 Python
Python序列类型的打包和解包实例
Dec 21 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
python获取淘宝服务器时间的代码示例
Apr 22 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
js运动应用实例解析
2015/12/28 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
JS实现在线ps功能详解
2019/07/31 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
对python中的pop函数和append函数详解
2018/05/04 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Python定时器线程池原理详解
2020/02/26 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
weblogic面试题
2016/03/07 面试题
清洁工表扬信
2014/01/08 职场文书
11月红领巾广播稿
2014/01/17 职场文书
小学教师国培感言
2014/02/08 职场文书
《掌声》教学反思
2014/02/23 职场文书
家长通知书家长评语
2014/04/17 职场文书
大学生交通专业求职信
2014/09/01 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书