函数重写(override/overwrite)


  函数重写(override/overwrite) 

函数重写

作用:
  让自定义的实例像内建对象一样   ,  进行函数操作

对象转字符串函数重写:
  repr(obj)  返回一个能代表此对象的表达式字符串,通常:
      eval(repr(obj)) == obj
  str(obj)  通过给定的对象返回一个字符串(这个字符串通常是给人来阅读的)

ex:




对象转字符串函数的两个重写方法:
  1 repr() 函数的重写方法:
      def __repr__(self):
  2 str() 函数的重写方法:
      def __str__(self):
      如果没有__str__(self) 方法, 则返回repr(obj),函数结果代替

repr 都是给电脑看的,返回的是一个 表达式



内建函数重写:

   def __abs__(self): 方法  abs(obj) 函数调用
   def __len__(self): 方法  len(obj) 函数调用
   def __reversed__(self): 方法  reversed(obj) 函数调用
   def __round__(self): 方法  round(obj) 函数调用





len函数和 reversed函数示例

   实现MyList类的列表反回函数reversed(x) 函数的重写
   __reversed__(self),实现定义列表的反转




__?????__ 标识符 通常有特殊的含义


数值转换函数的重写
    complex(obj)   ===> __complex__ 方法 
    int(obj)       ===> __int__     方法 
    float(obj)     ===> __float__   方法 
    bool(obj)      ===> __bool__    方法 
ex:




布尔测试运算符重写:
格式:
  def __bool__(self):
      ....
作用:
  1. 用于bool(obj) 函数取值
  2. 用于if 语句的真值表达式中
  3. 用于while语句的真值表达式中
说明:
  当没有__bool__(self) 方法时,真值测试将以__len__(self) 方法的返回值来测试布尔值




对象属性管理函数:
  1. getattr(obj, name[, default]) 从一个对象得到对象的属性,getattr(x, 'y') 等同于x.y,当属性不存在时,如果给出default参数,则返回default, 否则会产生一个AttributeError错误
  2. hasattr(obj, name)  用给定的name 返回对象obj是否有此属性,此种做法可以避免在getattr(obj,name) 时引发错误
  3. setattr(obj, name, value)  给对象obj的名为name的属性设置相应的值value, set(x, 'y', v)  等同于 x.y = v
  4. delattr(obj, name) 删除对象obj中的name属性,delattr(x, 'y') 等同于 del x.y





del 语句 最终总结:
    1) 删除变量
    2) 删除列表中的元素
    3) 删除字典中的键值对
    4) 删除对象的实例变量(也叫属性)




属性管理的重写
  __getattr__(self, n)  ===> x.y 或 getattr(x,'y')
  __setattr__(self, n, v) ===> x.y = v
  __delattr__(self, n) ===> del x.y 或 delattr(x, 'y')
属性管理的作用:
  实现的特殊属性的管理,模似一些特殊属性
注:
  以上方法,当属性不存在时,需要触发一个AttributeError的错误
说明:
  __getattr__ 是在找不到对象对应属性时才调用, 当没有属性时,需要产生一个AttrubuteError错误




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值