Python中__str__和__repr_之间有什么区别?


当前回答

repr()用于调试或日志。它用于开发人员理解代码。另一方面,str()用户用于非开发人员(QA)或用户。

class Customer:
    def __init__(self,name):
        self.name = name
    def __repr__(self):
        return "Customer('{}')".format(self.name)
    def __str__(self):
        return f"cunstomer name is {self.name}"

cus_1 = Customer("Thusi")
print(repr(cus_1)) #print(cus_1.__repr__()) 
print(str(cus_1)) #print(cus_1.__str__())

其他回答

摘自《流利的Python》一书:

Python对象的基本要求是提供可用的自身的字符串表示,用于调试和日志记录,另一个用于向最终用户演示。这就是为什么数据模型中存在特殊的方法repr_和str__。

str-从给定对象创建一个新的字符串对象。

repr-返回对象的规范字符串表示形式。

差异:

str():

使对象可读为最终用户生成输出

repr():

需要复制对象的代码为开发人员生成输出

除了给出的所有答案外,我想补充几点:-

1) 当您只需在交互式python控制台上写入对象名称并按enter键时,就会调用__repr_()。

2) __str__()在使用带有print语句的对象时被调用。

3) 在这种情况下,如果缺少__str__,那么print和任何使用str()的函数都会调用对象的__repr_()。

4) 容器的__str__(),当调用时将执行其包含元素的__repr_()方法。

5) 在__str__()内调用的str()可能会在没有基本情况的情况下递归,并且在最大递归深度上出错。

6) __repr_()可以调用repr(),它将尝试自动避免无限递归,用…替换已经表示的对象。。。。

来自effbot的(非官方)Python参考Wiki(存档副本):

__str__“计算对象的“非正式”字符串表示。这与__repr_不同,因为它不必是有效的Python表达式:可以使用更方便或更简洁的表示。”

repr()用于调试或日志。它用于开发人员理解代码。另一方面,str()用户用于非开发人员(QA)或用户。

class Customer:
    def __init__(self,name):
        self.name = name
    def __repr__(self):
        return "Customer('{}')".format(self.name)
    def __str__(self):
        return f"cunstomer name is {self.name}"

cus_1 = Customer("Thusi")
print(repr(cus_1)) #print(cus_1.__repr__()) 
print(str(cus_1)) #print(cus_1.__str__())