Python属性和内建属性实例解析

 更新时间:2020年01月14日 09:01:25   作者:小小程序员ol  
这篇文章主要介绍了Python属性和内建属性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了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中类的内建属性和方法


经典类(旧式类),早期如果没有要继承的父类,继承里空着不写的类

#py2中无继承父类,称之经典类,py3中已默认继承object
class Person:
  pass

子类没有实现__init__方法时,默认自动调用父类的。 如定义__init__方法时,需自己手动调用父类的__init__方法

__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实现配置热加载的方法详解

    所谓的配置热加载,也就是说当服务收到配置更新消息之后,我们不用重启服务就可以使用最新的配置去执行任务。本文将介绍如何用Python实现配置热加载,需要的可以参考一下
    2022-07-07
  • Python实现Excel和CSV之间的相互转换

    Python实现Excel和CSV之间的相互转换

    通过使用Python编程语言,编写脚本来自动化Excel和CSV之间的转换过程,可以批量处理大量文件,定期更新数据,并集成转换过程到自动化工作流程中,本文将介绍如何使用Python 实现Excel和CSV之间的相互转换,需要的朋友可以参考下
    2024-03-03
  • 举例讲解Python设计模式编程的代理模式与抽象工厂模式

    举例讲解Python设计模式编程的代理模式与抽象工厂模式

    这篇文章主要介绍了Python编程的代理模式与抽象工厂模式,文中举了两个简单的小例子来说明这两种设计模式的思路在Python编程中的体现,需要的朋友可以参考下
    2016-01-01
  • python opencv实现灰度图和彩色图的互相转换

    python opencv实现灰度图和彩色图的互相转换

    这篇文章主要给大家介绍了关于python opencv实现灰度图和彩色图的互相转换,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • 这三个好用的python函数你不能不知道!

    这三个好用的python函数你不能不知道!

    作为21世纪最流行的语言之一,Python当然有很多有趣的功能值得深入探索和研究.今天通过理论和实际例子来讨论,需要的朋友可以参考下
    2021-06-06
  • 解决PyQt5 无边框后窗口的移动问题

    解决PyQt5 无边框后窗口的移动问题

    这篇文章主要介绍了解决PyQt5 无边框后窗口的移动问题,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
    2021-03-03
  • Python使用zmail进行邮件发送的示例详解

    Python使用zmail进行邮件发送的示例详解

    这篇文章主要为大家详细介绍了Python如何使用zmail进行邮件发送功能,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-03-03
  • 教你用pyecharts绘制各种图表案例(效果+代码)

    教你用pyecharts绘制各种图表案例(效果+代码)

    说到pyecharts,相信很多人不会陌生,一个优秀的python可视化包,下面这篇文章主要给大家介绍了关于如何用pyecharts绘制各种图表案例的相关资料,需要的朋友可以参考下
    2022-06-06
  • 如何利用pycharm进行代码更新比较

    如何利用pycharm进行代码更新比较

    这篇文章主要介绍了如何利用pycharm进行代码更新比较,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Python中文编码知识点

    Python中文编码知识点

    在本篇文章里小编给大家分享了关于Python中文编码的相关知识点以及对应实例内容,有兴趣的朋友们学习下。
    2019-02-02

最新评论