美文网首页每天写500字每天写1000字
python 11:类的__str__和__repr__方法

python 11:类的__str__和__repr__方法

作者: 金石明镜 | 来源:发表于2019-11-10 20:59 被阅读0次

下面是一个简单的类

class Person:

    """Class to represent a person

    """

    def set_age(self,age):

        if 0<age<150:

            self.age=age

    def __init__(self,name='',age=0):

        self.name = name

        self.age = age

    def display(self):

        print("Person('%s',%d)" % (self.name, self.age))

    def __str__(self):

        return "Person('%s',%d)" % (self.name, self.age)

    def __repr__(self):

        return "Person('%s',%d)" % (self.name, self.age)

一、__str__和__repr__用来干什么?

类中的__str__和__repr__,是为了用来显示对象内容的。

如果有这两个方法时,我们就可以显示该类的对象的内容。

我们写类时,至少应该有__repr__,这时,如果调用str()方法,则会调用__repr__。两个方法中的语句,应该是显示类的内容的。这样使类的使用与其它基本类相同。

上例中,两个方法的代码一样,但一般应写得不一样。

二、举例

>>>p=Person('White',22)

>>>p

'White',22

如果没有__repr__,则上面的显示就是

'<__main__.Person object at 0x000002215F8E5208>'

如果有__str__,则

>>>str(p)

'White',22

如果没有__str__和__repr__,上面的显示就是

'<__main__.Person object at 0x0000017F23F44B48>'

上面显示中,内存的地址可能不同,是因环境而变化的。

三、两个方法应该怎样不一样?

没有规定两个方法应该怎样写。我们来看python自己的一个类datetime

>>>import datetime

>>>today=datetime.date.today()

>>>today

datetime.date(2019, 11, 10)#这是__repr__返回的值。

>>>str(today)

'2019-11-10'#这是__str__返回的值,更容易读

从这个例子,看到该类作者的意图:

__str__ 的返回结果可读性强。也就是说,__str__ 的意义是便于人们阅读信息。

__repr__ 的返回结果应更准确。__repr__ 存在的目的在于调试,便于开发者使用。我们发现将 __repr__ 返回的方式直接复制到命令行上,是可以直接执行的。

相关文章

网友评论

    本文标题:python 11:类的__str__和__repr__方法

    本文链接:https://www.haomeiwen.com/subject/aeaabctx.html