什么是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 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
python uuid模块使用实例
Apr 08 Python
Python遍历pandas数据方法总结
Feb 09 Python
Python操作MySQL数据库的方法
Jun 20 Python
python 返回列表中某个值的索引方法
Nov 07 Python
django-allauth入门学习和使用详解
Jul 03 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
Python函数参数类型及排序原理总结
Dec 19 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
Python使用Pygame绘制时钟
Nov 29 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/01/17 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP反向代理类代码
2014/08/15 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP类的特性实例分析
2016/09/28 PHP
用jscript启动sqlserver
2007/06/21 Javascript
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
使用python实现省市三级菜单效果
2016/01/20 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Python wordcloud库安装方法总结
2020/12/31 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
《陶罐和铁罐》教学反思
2014/02/19 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
个人授权委托书范本
2014/04/03 职场文书
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
Django框架之路由用法
2022/06/10 Python
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers