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 22 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
浅析NumPy 切片和索引
Sep 02 Python
利用python清除移动硬盘中的临时文件
Oct 28 Python
Python实现老照片修复之上色小技巧
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 和 COM
2006/10/09 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
python如何实现数据的线性拟合
2019/07/19 Python
python groupby 函数 as_index详解
2019/12/16 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
经贸日语毕业生自荐信
2013/11/03 职场文书
门面房租房协议书
2014/12/01 职场文书
员工辞职信怎么写
2015/02/27 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技