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 相关文章推荐
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
python 反向输出字符串的方法
Jul 16 Python
python实现ID3决策树算法
Aug 29 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
python之拟合的实现
Jul 19 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
Apr 13 Python
Python通过Schema实现数据验证方式
Nov 12 Python
django中websocket的具体使用
Jan 22 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
强制设为首页代码
2006/06/19 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
WSDL的操作类型主要有几种
2013/07/19 面试题
大学生文员专业个人求职信范文
2014/01/05 职场文书
户外婚礼策划方案
2014/02/08 职场文书
岗位安全生产责任书
2014/07/28 职场文书
政风行风评议整改方案
2014/09/15 职场文书
世界气象日活动总结
2015/02/27 职场文书
入党积极分子个人总结
2015/03/02 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
z-index不起作用
2021/03/31 HTML / CSS