python-str和repr内置属性

一、先看一种现象

l = list("2323")
print(l)  # 打印的是列表


class Foo:
    def __init__(self, name, age):
        self.name = name
        self.age = age


foo = Foo("张三",50)

print(foo)  # 打印的是内存地址
print(str(foo))
print(foo.__str__()) # str(foo) -->foo.__str__()

 

运行结果

['2', '3', '2', '3']
<__main__.Foo object at 0x0000000001DFCFD0>
<__main__.Foo object at 0x0000000001DFCFD0>
<__main__.Foo object at 0x0000000001DFCFD0>

 

 

这是由于__str__造成的。print的本质就是触发__str__

我们重写__str__这个方法,就能定制不同的字符串输出结果

 

二、定制对象的__str__

  注意:__str__返回的值必须是一个字符串

class Foo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return "姓名:%s 年龄:%s " %(self.name,self.age)

foo = Foo("张三",50)

print(foo)  # 打印了__str__ 的返回内容

  运行结果

姓名:张三 年龄:50 

 

 

 

三、__repr__

  __repr__也是用于修改打印输出的,区别是__repr__是在解释器交互窗口时触发

  

>>> class Foo:
...     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 "姓名--%s 年龄--%s " % (self.name, self.age)
...     
>>> foo = Foo("张三",50)
>>> Foo("张三",50)
姓名--张三 年龄--50  # 打印的是__repr__返回内容

 

当只重写了__repr__,没有重写__str__,print时会触发__repr__的内容

class Foo:
    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 "姓名--%s 年龄--%s " % (self.name, self.age)




foo = Foo("张三",50)

print(foo)  # str(foo) -->foo.__str__()-->foo.__repr__() 找不到__str__,则使用__repr__;__repr__也没有则默认打印内存地址

  运行结果

姓名--张三 年龄--50 

 

 

 

 

posted on 2019-11-19 17:25  别动我的锅  阅读(90)  评论(0)    收藏  举报

导航

levels of contents