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 21 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
使用tensorflow实现线性回归
Sep 08 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
django连接oracle时setting 配置方法
Aug 29 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
python中dict()的高级用法实现
Nov 13 Python
python如何将两张图片生成为全景图片
Mar 05 Python
Python OrderedDict字典排序方法详解
May 21 Python
在python中实现导入一个需要传参的模块
May 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运行时强制显示出错信息的代码
2011/04/20 PHP
20个PHP常用类库小结
2011/09/11 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
python将ansible配置转为json格式实例代码
2017/05/15 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
加工操作管理制度
2014/01/19 职场文书
小学英语教学反思案例
2014/02/04 职场文书
老同学聚会感言
2014/02/23 职场文书
会计演讲稿范文
2014/05/23 职场文书
挂职学习心得体会
2014/09/09 职场文书
应聘教师求职信范文
2015/03/20 职场文书
公司2015年终工作总结
2015/05/26 职场文书
主持人大赛开场白
2015/05/29 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
2019同学聚会主持词
2019/05/06 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS