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检测某个变量是否有定义的方法
May 20 Python
python 打印对象的所有属性值的方法
Sep 11 Python
tensorflow 输出权重到csv或txt的实例
Jun 14 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
Python实现网站表单提交和模板
Jan 15 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python3 实现串口两进程同时读写
Jun 12 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python实现双向链表原理
May 25 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python制作简单的网页爬虫
2015/11/22 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python单元测试与测试用例简析
2019/11/09 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
python 实现简易的记事本
2020/11/30 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
《都江堰》教学反思
2014/02/07 职场文书
仓管岗位职责范本
2014/02/08 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
文明家庭事迹材料
2014/12/20 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书