函数重写(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错误