什么是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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
python动态监控日志内容的示例
Feb 16 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
python使用线程封装的一个简单定时器类实例
May 16 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
Python元组常见操作示例
Feb 19 Python
python实现大学人员管理系统
Oct 25 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
基于Python实现天天酷跑功能
Jan 06 Python
Python中的套接字编程是什么?
Jun 21 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 获取全局变量的代码
2011/04/21 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP云打印类完整示例
2016/10/15 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
原生js实现随机点名
2020/07/05 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python实现下载文件的三种方法
2017/02/09 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
应届毕业生通用的自荐书范文
2014/02/07 职场文书
项目合作协议书范本
2014/04/16 职场文书
学校周年庆活动方案
2014/08/22 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python