什么是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 相关文章推荐
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
Python 统计字数的思路详解
May 08 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
python django中8000端口被占用的解决
Dec 17 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
一文详述 Python 中的 property 语法
Sep 01 Python
浅析python中的del用法
Sep 02 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
php实现socket推送技术的示例
2017/12/20 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
如何运行Python程序的方法
2013/04/21 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
对python中Json与object转化的方法详解
2018/12/31 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
基于django传递数据到后端的例子
2019/08/16 Python
python conda操作方法
2019/09/11 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
素食餐饮项目创业计划书
2014/02/02 职场文书
买房子个人收入证明
2014/10/12 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
商业计划书格式、范文
2019/03/21 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python