Python属性和内建属性实例解析


Posted in Python onJanuary 14, 2020

这篇文章主要介绍了Python属性和内建属性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. 私有属性添加getter和setter方法

class Money(object):
  def __init__(self):
    self.__money = 0

  def getMoney(self):
    return self.__money

  def setMoney(self, value):
    if isinstance(value, int):
      self.__money = value
    else:
      print("error:不是整型数字")

2. 使用property升级getter和setter方法

class Money(object):
  def __init__(self):
    self.__money = 0

  def getMoney(self):
    return self.__money

  def setMoney(self, value):
    if isinstance(value, int):
      self.__money = value
    else:
      print("error:不是整型数字")
  money = property(getMoney, setMoney)

运行结果:

In [1]: from get_set import Money

In [2]: 

In [2]: a = Money()

In [3]: 

In [3]: a.money
Out[3]: 0

In [4]: a.money = 100

In [5]: a.money
Out[5]: 100

In [6]: a.getMoney()
Out[6]: 100

3. 使用property取代getter和setter方法

@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用

将方法转换为只读

重新实现一个属性的设置和读取方法,可做边界判定

class Money(object):
  def __init__(self):
    self.__money = 0

  @property
  def money(self):
    return self.__money

  @money.setter
  def money(self, value):
    if isinstance(value, int):
      self.__money = value
    else:
      print("error:不是整型数字")

运行结果

In [3]: a = Money()

In [4]: 

In [4]: 

In [4]: a.money
Out[4]: 0

In [5]: a.money = 100

In [6]: a.money
Out[6]: 100

内建属性

"teachclass.py"
class Person(object):
  pass

python3.5中类的内建属性和方法

Python属性和内建属性实例解析

经典类(旧式类),早期如果没有要继承的父类,继承里空着不写的类

#py2中无继承父类,称之经典类,py3中已默认继承object
class Person:
  pass

子类没有实现__init__方法时,默认自动调用父类的。 如定义__init__方法时,需自己手动调用父类的__init__方法

Python属性和内建属性实例解析

__getattribute__例子:

class Itcast(object):
  def __init__(self,subject1):
    self.subject1 = subject1
    self.subject2 = 'cpp'

  #属性访问时拦截器,打log
  def __getattribute__(self,obj):
    if obj == 'subject1':
      print('log subject1')
      return 'redirect python'
    else:  #测试时注释掉这2行,将找不到subject2
      return object.__getattribute__(self,obj)

  def show(self):
    print('this is Itcast')

s = Itcast("python")
print(s.subject1)
print(s.subject2)

运行结果:

log subject1
redirect python
cpp

**__getattribute__的坑**

class Person(object):
    def __getattribute__(self,obj):
      print("---test---")
      if obj.startswith("a"):
        return "hahha"
      else:
        return self.test

    def test(self):
      print("heihei")

  t.Person()
  t.a #返回hahha
  t.b #会让程序死掉
    #原因是:当t.b执行时,会调用Person类中定义的__getattribute__方法,但是在这个方法的执行过程中
    #if条件不满足,所以 程序执行else里面的代码,即return self.test 问题就在这,因为return 需要把
    #self.test的值返回,那么首先要获取self.test的值,因为self此时就是t这个对象,所以self.test就是
    #t.test 此时要获取t这个对象的test属性,那么就会跳转到__getattribute__方法去执行,即此时产
    #生了递归调用,由于这个递归过程中 没有判断什么时候推出,所以这个程序会永无休止的运行下去,又因为
    #每次调用函数,就需要保存一些数据,那么随着调用的次数越来越多,最终内存吃光,所以程序 崩溃
    #
    # 注意:以后不要在__getattribute__方法中调用self.xxxx

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中IPYTHON入门实例
May 11 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
详解Django定时任务模块设计与实践
Jul 24 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
python中np是做什么的
Jul 21 Python
Python self用法详解
Nov 28 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
Python程序控制语句用法实例分析
Jan 14 #Python
dpn网络的pytorch实现方式
Jan 14 #Python
Django之form组件自动校验数据实现
Jan 14 #Python
简单了解python filter、map、reduce的区别
Jan 14 #Python
Python vtk读取并显示dicom文件示例
Jan 13 #Python
Python解析多帧dicom数据详解
Jan 13 #Python
python 将dicom图片转换成jpg图片的实例
Jan 13 #Python
You might like
用PHP调用数据库的存贮过程
2006/10/09 PHP
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python实现二维数组输出为图片
2018/04/03 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
python 实现dict转json并保存文件
2019/12/05 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python自动生成sql语句的脚本
2021/02/24 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
韩国11街:11STREET
2018/03/27 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
2015年车间安全管理工作总结
2015/05/13 职场文书
小学体育组工作总结
2015/08/13 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL