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框架中实现全文搜索功能
Apr 20 Python
Python内置模块logging用法实例分析
Feb 12 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
老生常谈python中的重载
Nov 11 Python
python实现静态web服务器
Sep 03 Python
Python autoescape标签用法解析
Jan 17 Python
基于python修改srt字幕的时间轴
Feb 03 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
python调用有道智云API实现文件批量翻译
Oct 10 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网站基础优化方法小结
2008/09/29 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
php学习之流程控制实现代码
2011/06/09 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
Prototype Number对象 学习
2009/07/19 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
canvas知识总结
2017/01/25 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
python基础教程之对象和类的实际运用
2014/08/29 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python+django加载静态网页模板解析
2017/12/12 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
团代会宣传工作方案
2014/05/08 职场文书
律政俏佳人观后感
2015/06/09 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
德生2P3收音机开箱评测
2022/04/30 无线电