什么是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中的__init__ 、__new__、__call__小结
Apr 25 Python
python实现sublime3的less编译插件示例
Apr 27 Python
tensorflow实现softma识别MNIST
Mar 12 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
python中dict使用方法详解
Jul 17 Python
python实现简单银行管理系统
Oct 25 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
Python PIL库图片灰化处理
Apr 07 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
Python爬虫中Selenium实现文件上传
Dec 04 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
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
php关联数组快速排序的方法
2015/04/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
Python算法之栈(stack)的实现
2014/08/18 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
《记承天寺夜游》教学反思
2014/02/16 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
自我推荐信怎么写
2015/03/24 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
Golang中channel的原理解读(推荐)
2021/10/16 Golang
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
青岛市的收音机研制与生产
2022/04/07 无线电