函数重写
定义:在自定义类内添加相应的方法,让自定义的类生成的对象(实例)像内建对象一样进行内建的函数操作
对象字符串函数重写
repr(obj) 返回一个能代表对象的表达式字符串 eval(repr(obj)) == obj
str(obj) 通过给定对象返回一个字符串
class MyNumber:
def __init__(self, value):
self.data = value
n1 = MyNumber(100)
print(repr(n1))
print(str(n1))
打印结果为:
<__main__.MyNumber object at 0x00000258490EC128>
<__main__.MyNumber object at 0x00000258490EC128>
之所以是这样的结果,是因为在父类当中有__str__这个方法,我们在类的方法中并没有看到__str__只有一个__init__初始化的方法,当前没有其实调用的是object类的__str__方法
那么我看到返回的值是这样的地址,那么如果我们不想要这么样的结果,我们就需要重写函数,去覆盖object类里的原始__str__方法
class MyNumber:
def __init__(self, value):
self.data = value
def __str__(self):
return '数字:%d' % self.data
n1 = MyNumber(100)
print(repr(n1))
print(str(n1))
返回结果为:
<__main__.MyNumber object at 0x000002492FA9C128>
数字:100
那么我们看到了print(str(n1))的结果为100,print(repr(n1))的结果并没有改变,是因为并没重写object类里的repr方法
class MyNumber:
def __init__(self, value):
self.data = value
def __str__(self):
return '数字:%d' % self.data
def __repr__(self):
return 'repr:%d' % self.data
n1 = MyNumber(100)
print(repr(n1))
print(str(n1))
返回结果:
repr:100
数字:100