zoukankan      html  css  js  c++  java
  • 内置方法 str-repr

    一、平时我们获取打印一个对象的时候,我们打印的是它的地址,如果我们想知道其中具体的值必须一个一个对象.属性调取,

      如何去用某种东西去一次性打印出我们所需要的呢?如下,我们有两种方法

        优先级:__str__   > __repr__

        __str__方法在一个类的内部的定义,跟在外部的调用,如下

        

    class A(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
        
        def __str__(self)                              #如果不实现str方法打印出来的是对象的地址
            return f'{self.name}{self.age}'   
    person = A('alex',123)
    #调用方式(触发str): #1. print(person) #打印触发 #2. print(f'{python}') #格式化触发
    class A(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
        # def __repr__(self):
            # return f'{self.name},{self.age}'
        def __str__(self):
            return f'{self.name},{self.age}'
    
    alex = A('alex',23)
    print(alex)
    print(f'{alex}')
    print(repr(alex))
    print('%r'%alex)


    # 如果str存在,repr也存在
    # 那么print(obj)和使用字符串格式化format,%s这两种方式 调用的都是__str__
    # 而repr(obj)和%r格式化字符串,都会调用__repr__
    # 如果str不存在,repr存在
    # 那么print(obj),字符串格式化format,%s,%r 和repr(obj)都调用__repr__
    # 如果str存在,repr不存在
    # 那么print(obj)和使用字符串格式化format,%s这两种方式 调用的都是__str__
    # repr(obj)和%r格式化字符串 都会打印出内存地址

    综上所述,我们还是用repr好,你说呢?

    class A(object):
        def __init__(self,name,price,period):
            self.name = name
            self.price = price
            self.period = period
        def __repr__(self):
            return f'{self.name},{self.price},{self.period}'
        def __str__(self):
            return f'---{self.name},{self.price},{self.period}'
    
    class B(A):
        def __repr__(self):
            return f'{self.name}---{self.price}---{self.period}'
        def __str__(self):
            return f'{self.name}?{self.price}?{self.period}'
        # pass
    py20 = B('alex',100,2)
    print(py20)

    注意:打印的时候先找自己的str,如果没有找父类的str,如果父类也没有就找自己的repr,如果自己也没repr,就找父类的repr

    # 有了repr或者str在打印对象的时候 就不会显示用户不关心的内存地址了
    # 增强了用户的体验 在程序开发的过程中
    # 如果我们需要频繁打印对象中的属性,需要从类的外部做复杂的拼接,实际上是一种麻烦
    # 如果这个拼接工作在类的内部已经完成了,打印对象的时候直接就能显示

  • 相关阅读:
    运营总监招聘-e袋洗招聘-拉勾网
    中国服饰行业十大趋势
    赢在形象力之色彩
    百度系统部 在 北京市海淀区西二旗首创空间大厦 招聘 Python-交付运维系统研发工程师
    时间规划师
    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道
    传统线下零售商已经过时了,细分电商领域的机会仍待挖掘 | 36氪
    艺术私学----免费摄影、绘画、时尚造型课程体验_豆瓣
    艺术私学------绘画免费体验课程_豆瓣
    艺术私学------绘画免费体验课程_豆瓣
  • 原文地址:https://www.cnblogs.com/CNHK1949/p/10642458.html
Copyright © 2011-2022 走看看