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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
python读取浮点数和读取文本文件示例
May 06 Python
Python类属性的延迟计算
Oct 22 Python
Python3学习urllib的使用方法示例
Nov 29 Python
python实现周期方波信号频谱图
Jul 21 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
对Python 语音识别框架详解
Dec 24 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
python实现图片上添加图片
Nov 26 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
Python如何安装第三方模块
May 28 Python
Python暴力破解Mysql数据的示例
Nov 09 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
Syphon 使用方法
2021/03/03 冲泡冲煮
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
js循环改变div颜色具体方法
2013/06/25 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
公司请假条格式
2014/04/11 职场文书
搞笑车尾标语
2014/06/23 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
个人自荐书怎么写
2015/03/26 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
Python+Appium自动化测试的实战
2021/06/30 Python
关于MySQL中的 like操作符详情
2021/11/17 MySQL
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js