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中Flask框架简单入门实例
Mar 21 Python
python自动裁剪图像代码分享
Nov 25 Python
Sanic框架配置操作分析
Jul 17 Python
Django forms组件的使用教程
Oct 08 Python
浅析python参数的知识点
Dec 10 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
Python enumerate内置库用法解析
Feb 24 Python
Python自带的IDE在哪里
Jul 01 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php可变长参数处理函数详解
2017/02/22 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
可以将word转成html的js代码
2010/04/11 Javascript
javascript动画浅析
2012/08/30 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
JavaScript事件 "事件对象"的注意要点
2016/01/14 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Java平台和其他软件平台有什么不同
2015/06/05 面试题
运动会稿件200字
2014/02/07 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
委托书的写法
2014/08/30 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
打架检讨书范文
2015/01/27 职场文书
会议营销主持词
2015/07/03 职场文书
学校教代会开幕词
2016/03/04 职场文书