工具转字符串函数:repr(obj) ,前往一个能代表此工具的表白式字符串,通常eval(repr(obj)) == obj (这个字符勾通常是给python诠释执行器运转用的),str(obj) 经过给定的工具前往一个字符串(这个字符勾通常是给人浏览的)。
工具转字符串函数的重写办法:
repr(obj) 函数的重写办法:
def __repr__(self):
str(obj) 函数的重写办法:
def __str__(self):
阐明:
1. str(obj) 函数先查找, obj.__str__()办法,挪用此办法并前往后果
2. 假如不obj.__str__()办法时,则前往obj.__repr__()办法的后果并前往
3. 假如obj.__repr__办法没有存正在,则挪用object类的__repr__实例办法显示<__main__.XXXX object at 0xAABBCCDD>格局的字符串
示例:
# 此示例表示经过重写 repr 以及 str办法扭转转为字符串的规定 class MyNumber: def __init__(self, value): '结构函数,初始化MyNumber工具' self.data = value def __str__(self): '''转换为一般人辨认的字符串''' # print("__str__办法被挪用!") return "自界说数字类型工具: %d" % self.data def __repr__(self): '''转换为eval可以辨认的字符串''' return 'MyNumber(%d)' % self.data n1 = MyNumber(100) n2 = MyNumber(200) print('repr(n1) ====>', repr(n1)) print('str(n2) ====>', str(n2))
相干保举:《Python视频教程》
其它内建函数的重写办法:
__abs__ abs(obj) 函数
__len__ len(obj) 函数(必需前往整数)
__reversed__ reversed(obj) 函数(必需前往可迭代工具
__round__ round(obj) 函数
示例:
# 此示例表示abs 函数的重写 class MyInteger: def __init__(self, v): self.data = v def __repr__(self): return 'MyInteger(%d)' % self.data def __abs__(self): v = abs(self.data) return MyInteger(v) # 用v创立另外一个MyInteger工具 def __len__(self): return 10000 I1 = MyInteger(-10) print('I1 =', I1) I2 = abs(I1) print("I2 =", I2) print('len(I2)=', len(I2)) # 10000
数值转换函数的重写:
__complex__ complex(obj) 函数
__int__ int(obj) 函数
__float__ float(obj) 函数
__bool__ bool(obj) 函数 (见上面布尔测试函数重载)
示例:
# 此示例表示数据转换结构函数的重写办法 class MyNumber: def __init__(self, value): self.data = value def __repr__(self): return 'MyNumber(%d)' % self.data def __int__(self): 'int函数的重载' return self.data n1 = MyNumber(100) x = int(n1) print(n1) print(bool(n1)) # True n2 = MyNumber(0) print(bool(n2)) # True
布尔测试函数重写:
格局:
__bool__
作用:
用于bool(obj) 函数取值
用于if语句的真值表白式中
用于while 语句的真值表白式中
阐明:
1. 当自界说的类内有 __bool__(self) 办法时,以此办法的前往值作为bool(obj) 的前往值
2. 当没有存正在__bool__(self) 办法时,bool(x) 前往__len__(self) 办法的前往值能否为零来测试布尔值
3. 当没有存正在__len__(self) 办法时,则间接前往True
示例:
# 此示例表示bool(x) 函数的重写 class MyList: '自界说类型的列表,用来保留数据,外部用一个列表来存储数据' def __init__(self, iterable=()): self.data = [x for x in iterable] def __repr__(self): return 'MyList(%s)' % self.data def __len__(self): '''前往长度''' print("__len__办法被挪用") return len(self.data) def __bool__(self): print("__bool__办法挪用") for x in self.data: if not x: return False return True # return False # <<=== 一切工具都为False myl = MyList([0, -1, 2, -3]) # myl = MyList() print(myl) print(bool(myl)) if myl: print("myl为真值") else: print('myl为假值')
以上就是python函数重写怎样了解的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题 函数重写
抱歉,评论功能暂时关闭!