引言
python中定义一个类时,常用__str__以及__repr__函数输出这个类的具体描述,但这两个函数具体又有些什么区别呢?一句话总结的话:__repr__比__str__的使用要求更加严格,优先级更低。
优先级比较
class My_func (object):
def __init__(self,name):
self.name=name
def __str__(self):
print("这是一个__str__函数")
return self.name
def __repr__(self):
print("这是一个__repr__函数")
return self.name
def main():
fun=My_func('doge')
print(fun)
if __name__=='__main__':
main()
运行结果:
这是一个__str__函数
doge
从上面可以看出,当使用print()输出类的描述时,会优先寻找__str__函数的解释。
使用要求比较:
无str
class My_func (object):
def __init__(self,name):
self.name=name
def __repr__(self):
print("这是一个__repr__函数")
return self.name
def main():
fun=My_func('doge')
print(str(fun))
if __name__=='__main__':
main()
运行结果:
这是一个__repr__函数
doge
如上所示,当类方法中没有定义__str__时,调用__str__函数并不会输出默认的地址值,而是会调用存在的__repr__函数
无repr
class My_func (object):
def __init__(self,name):
self.name=name
def __str__(self):
print("这是一个__str__函数")
return self.name
def main():
fun=My_func('doge')
print(repr(fun))
if __name__=='__main__':
main()
结果:
<__main__.My_func object at 0x000001F1E4072518>
当类中并没有定义__repr__时,不会再调用__str__,而是会直接输出默认值即内存中的地址。
另:这两个函数的return值都应该是字符,不能return一个整型或其他值。