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 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
python requests使用socks5的例子
Jul 25 Python
python opencv调用笔记本摄像头
Aug 28 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
python梯度下降算法的实现
Feb 24 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
python利用 keyboard 库记录键盘事件
Oct 16 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中批量修改文件后缀名的函数代码
2011/10/23 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
Preload基础使用方法详解
2020/02/03 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
python生成器用法实例详解
2019/11/22 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
python3.8下载及安装步骤详解
2020/01/15 Python
新手学python应该下哪个版本
2020/06/11 Python
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
护士自荐信范文
2013/12/15 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
公务员年终个人总结
2015/02/12 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
联谊会开场白
2015/06/01 职场文书
房贷工资证明范本
2015/06/12 职场文书
2016党校学习心得体会
2016/01/07 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle