首先看下属性的分类:

  1:实例属性:

    最好在__init__(self,...)中初始化

    内部调用时都需要加上self.

    外部调用时用instancename.propertyname

  2:类属性:

    在__init__()外初始化

    在内部用classname.类属性名调用

    外部既可以用classname.类属性名又可以用instancename.类属性名来调用

  3:私有属性:

    1):单下划线_开头:只是告诉别人这是私有属性,外部依然可以访问更改

    2):双下划线__开头:外部不可通过instancename.propertyname来访问或者更改

      实际将其转化为了_classname__propertyname

正常情况下,我们对属性赋值,直接赋值就可以了:

class People(object):def __init__(self, name, age):self.name = nameself.age = agep1 = People('张三', 22)
p1.name='李四'
print(p1.name)++++++++++++++++++++++result++++++++++++++++++++++++
李四

但是如果我们对所赋的值有一定的限制,比如要求名字必须是字符串,年龄必须是数字,否则会对方法的调用造成影响,这个时候单纯的赋值就不能满足这样的过滤效果了。既然是条件过滤,那么这几条代码就需要放在方法里,所以就有了setName(),getName()这样的方法,在set方法里做条件限制,使用的时候是这样的:

p1 = People('张三', 22)
p1.set('李四')
print(p1.getName());

这样其实已经可以了,很满足功能需要。而用@property是让这个更简洁,既保持直接对属性赋值的方便,又对条件做了限制:

    @propertydef name(self):a = self._name#返回前还可以对数据做处理,比如格式化等return a@name.setterdef name(self,value):#在赋值之前添加判断if not isinstance(value,str):# 抛出异常raise TypeError('People object.name,name must be a str!')self._name = value#调用的时候仍然是方便快捷的直接赋值:
p1 = People('张三', 22);
p1.name='李四'
print(p1.name)++++++++++++++++++++++result++++++++++++++++++++++++
李四

总之,@property就是既拥有set、get方法的灵活性,又具有属性直接赋值取值的简便性。

Python属性使用@property和不使用@property的差别相关推荐

  1. python面对对象编程-------5:获取属性的四种办法:@property, __setattr__(__getattr__) ,descriptor...

    一:最基本的属性操作 1 class Generic: 2 pass 3 4 g= Generic() 5 6 >>> g.attribute= "value" ...

  2. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  3. python property setter_Python:动态属性 property setter 以及 __getattr__ 属性

    1. property 引言: -- 假设有这样一个需求,我们需要创建一个 User 类,并初始化 birthday 参数,之后根据 birthday 计算得到年龄: -- 我们设计下面的代码实现该需 ...

  4. Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略

    Python语言学习:复杂函数(yield/)使用方法.案例应用之详细攻略 目录 yield 1.生成斐波那契數列 @property 其他函数 yield 带有 yield 的函数在 Python ...

  5. 【Python面向对象编程】第17篇 property类

    本篇我们学习如何利用 property 类定义类的属性(property). 类的属性 以下代码定义了一个 Person 类,包含两个属性 name 和 age,然后又创建了一个新的 Person 类 ...

  6. 第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析

    一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...

  7. python属性_Python属性()

    python属性 Python property() function returns a property attribute. It's mostly used to create a manag ...

  8. 有效的python属性管理:描述符的使用

    前言 最近使用描述符对自己的催化动力学模拟程序进行了改进,在Python描述符的帮助下实现了更加灵活而且强大有效的属性管理,使得程序各个组件的数据封装更加完善管理也更加有条理. 本文就以自己程序中运用 ...

  9. python中iadd与add_如何为Python属性实现-uyu iadd_uu

    我试图创建一个Python属性,其中就地添加是由不同的方法处理的,而不是检索值.添加另一个值并重新赋值.因此,对于对象o上的属性xo.x += 5 应该不同于 ^{pr2}$ o.x的值最终应该是相同 ...

  10. python属性_python属性定义

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在java里, 若要为一个类定义只读的属性, 只需要将目标属性用private修 ...

最新文章

  1. 华为离职副总裁徐家骏:透露年薪千万的工作感悟,太震撼了!
  2. java实例变量可以被覆盖吗_Java继承覆盖实例变量
  3. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 13丨每位学生的最高成绩【难度中等】
  4. java的隐式对象_java常见面试题:隐式对象有哪些?
  5. Python打印指定日期日历
  6. Arts 第十二周(6/3 ~ 6/9)
  7. vs2013 资源视图 看不到东西
  8. CSDN积分获得途径
  9. osx 字体 linux,Linux/MacOS下matplotlib能正常显示的中文字体选择
  10. [HTML+CSS]电商网站模板
  11. Unity3d学习笔记-Demo实现
  12. Python打造一款属于自己的翻译词典
  13. 你的健身方法真的正确吗
  14. 网上商城建设:微信小程序直播申请开通流程及开通方法
  15. jQuery快速掌握(看这一篇就够了)
  16. 阅兵式直播刺杀总统,无人机敢死队有多可怕
  17. 计算机基础之计算机的前沿技术
  18. Matlab中左除(\)与右除(/)的区别
  19. RED5学习(二)——第一个red5项目
  20. 使用云效 修改 layui 环境变量

热门文章

  1. 正则表达式匹配经纬度
  2. 中介效应调节效应分析对比及操作详解
  3. Microsoft Office XP 智能标记的安装和安全性
  4. 设计模式(十一)——树形结构:组合模式
  5. Python之面向对象-类与 类之间的关系
  6. linux top命令 什么意思,Linux下的top命令、%cpu和cps(s)到底是什么意思呢!
  7. 微信内部H5页面:处理用户修改微信字体大小造成的页面溢出问题
  8. 收藏这16个顶级思维模型
  9. Mysql8数据库导到Mysql5数据库,报错Unknown collation: 'utf8mb4_0900_ai_ci'
  10. Excel VBA小程序04- 合并同文件夹下多工作簿中同名工作表并生成汇总表格