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入门篇之字符串
Oct 17 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
讲解Python中if语句的嵌套用法
May 14 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python:动态路由的Flask程序代码
Nov 22 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python实现ping命令小程序
Dec 28 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计算title标题相似比的方法
2015/07/29 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP精确计算功能示例
2016/11/29 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
Python中的面向对象编程详解(上)
2015/04/13 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python如何在bool函数中取值
2020/09/21 Python
谈谈python垃圾回收机制
2020/09/27 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
业务部经理岗位职责
2014/01/04 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
北京爱情故事观后感
2015/06/12 职场文书
小学数学教学反思范文
2016/02/16 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android