什么是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的curses库使用教程
Apr 11 Python
python模块导入的细节详解
Dec 10 Python
Python向excel中写入数据的方法
May 05 Python
Python日志无延迟实时写入的示例
Jul 11 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
浅析Python 引号、注释、字符串
Jul 25 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
python 实现单通道转3通道
Dec 03 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
python+requests接口自动化框架的实现
Aug 31 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新手用的Insert和Update语句构造类
2012/03/31 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP实现的日历功能示例
2018/09/01 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
python查询mysql中文乱码问题
2014/11/09 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
python 实时遍历日志文件
2016/04/12 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
想学画画?python满足你!
2020/12/24 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP