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 命令行也可以自动补全
Nov 30 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
python实现多线程网页下载器
Apr 15 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
python中time包实例详解
Feb 02 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
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
由php if 想到的些问题
2008/03/22 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
python获取当前日期和时间的方法
2015/04/30 Python
python协程用法实例分析
2015/06/04 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
python实现文法左递归的消除方法
2020/05/22 Python
Python gevent协程切换实现详解
2020/09/14 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
简历自我评价模版
2014/01/31 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
台风停课通知
2015/04/24 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
劳保用品管理制度范本
2015/08/06 职场文书