__repr__和__str__

2020-06-12  本文已影响0人  mmee

二者的目的不同:

class User:
    def __init__(self,name,age):
        self._name = name
        self._age = age
    def __str__(self):
        return '%s,%s' % (self._name,self._age)
    def __repr__(self):
        return 'User(%r,%r)' % (self._name,self._age) #使用%s将返回User(zhangsan,10),无法创建对象
user = User('zhangsan',10)
print(repr(user))
print(str(user))
another = eval(repr(user)) #创建一个新的User对象

输出

User('zhangsan',10)
zhangsan,10

没有定义__repr____str__,str和repr输出结果相同

class MyClass:
    pass
myclass = MyClass()
print(str(myclass))
print(repr(myclass))
print(myclass)

输出:
<__main__.MyClass object at 0x034418E0>
<__main__.MyClass object at 0x034418E0>
<__main__.MyClass object at 0x034418E0>

只定义__repr____str__ == __repr__

如果只实现这两个特殊方法中的一个,repr 是更好的选择,因为如果一个对象没有 str 函数,而 Python 又需要调用它的时
候,解释器会用 repr 作为替代。

class MyClass:
    def __repr__(self):
        return "hello"
输出:
hello
hello
hello

只定义__str__,__repr__!=__str__

class MyClass:
    def __str__(self):
        return "hello"

hello
<__main__.MyClass object at 0x03720910>
hello
上一篇 下一篇

猜你喜欢

热点阅读