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 域名分析工具实现代码
Jul 15 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
Pycharm学习教程(1) 定制外观
May 02 Python
Django自定义用户认证示例详解
Mar 14 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
wxPython的安装与使用教程
Aug 31 Python
python 多个参数不为空校验方法
Feb 14 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Python3操作MongoDB增册改查等方法详解
Feb 10 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 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+DBM的同学录程序(5)
2006/10/09 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
详解vue高级特性
2020/06/09 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
对python周期性定时器的示例详解
2019/02/19 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
企业财务经理岗位职责
2015/04/08 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
如何在python中实现ECDSA你知道吗
2021/11/23 Python
Android Studio 计算器开发
2022/05/20 Java/Android
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技