美文网首页每天写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