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中使用Inotify监控文件实例
Feb 14 Python
在Python中操作字典之update()方法的使用
May 22 Python
python与php实现分割文件代码
Mar 06 Python
django框架如何集成celery进行开发
May 24 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
pytorch进行上采样的种类实例
Feb 18 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 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中使用Oracle数据库(2)
2006/10/09 PHP
PHP完整的日历类(CLASS)
2006/11/27 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Python实现简单字典树的方法
2016/04/29 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python中metaclass原理与用法详解
2019/06/25 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
春节活动策划方案
2014/01/24 职场文书
采购经理岗位职责
2014/02/16 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
慰问信范文
2015/02/14 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
闪闪红星观后感
2015/06/08 职场文书