函数(字符串函数)重写 overwrite
什么是而函数重写
在自定义的类内添加相应的方法,让自定义的类创建的实例能够使用內建函数进行操作对象转字符串函数
- repr(x) 返回一个能表示python对象的表达式字符串,通常
eval(repr(obj)) == obj
得到的是对象前后加上表示字符串的引号 - str(x) 通过给定的对象返回一个字符串(这个字符串通常供人阅读)
示例:
- repr(x) 返回一个能表示python对象的表达式字符串,通常
s = "I'mTeacher"
print(str(s)) # I'mTeacher 这是人能阅读的字符串
print(repr(s)) # "I'mTeacher" 这是python能够识别的表达式(字符串对象)
str(obj)函数调用方法说明:
1. str(obj) 函数先查找obj.__str__()方法,调用此方法并返回结果
2. 如果obj.__str__()方法不存在, 则调用__repr__ 方法并返回结果
3. 如果 obj.__repr__ 示例方法显示 <main,×××× object at 0xXXXXXXXX>格式的字符串
下面为对象转字符串函数的重写:
class Mynumber():
def __init__(self, val):
self.data = val # 每个对象内部都创建一个实例变量来绑定数据
n1 = Mynumber(100)
# str 调用的是父类 object中的 __str__() 方法
print('str(n1) =', str(n1)) # 如何希望打印出的是自定义数字 100
print('repr(n1) =', repr(n1))
# 结果为
# str(n1) = <__main__.Mynumber object at 0x7fad74af1a20>
# repr(n1) = <__main__.Mynumber object at 0x7fad74af1a20>
print('--------------------下面重写str---------------------------')
# 此示例示意对象转字符串函数的重写方法重写__str__()方法
class Mynumber():
def __init__(self, val):
self.data = val # 每个对象内部都创建一个实例变量来绑定数据
def __str__(self):
return "自定义数字: %d" % self.data
n1 = Mynumber(100)
# 重写后调用自己的 n1.__str__() 方法, 看结果 ,覆盖了object 中的方法
print('str(n1) =', str(n1)) # 希望打印出的是自定义数字 100
print(n1.__str__())
# str(n1) = 自定义数字: 100
print(n1) # 在 print 内部会将n2用str(x)转为字符串再写到sys.stdout中
# 自定义数字: 100
print('repr(n1) =', repr(n1))
# 调用的是 object 里面的 __repr__() 方法
# repr(n1) = <__main__.Mynumber object at 0x7fde06b2b978>
print('--------------------下面重写repr--------------------------')
# 此示例示意对象转字符串函数的重写方法重写__repr__()方法
class Mynumber():
def __init__(self, val):
self.data = val # 每个对象内部都创建一个实例变量来绑定数据
def __str__(self):
return "自定义数字: %d" % self.data
def __repr__(self):
'''此方法返回来的字符串一定是能表示self对象的表达式字符串'''
return 'MyNumber(%d)' % self.data
n1 = Mynumber(100)
# str 调用的是父类 object中的 __str__() 方法
# 可以重写,调用自己的 n1.__str__() 方法, 看结果 ,覆盖了object 中的方法
print('repr(n1) =', repr(n1))
# repr(n1) = MyNumber(100)