python魔法函数之str和repr

python魔法函数之str和repr

业务场景

业务场景:你打印了一个类,发现打印出来的是一个内存地址,那你想把属性打印出来该怎么办呢

"""
@File    :   MyMoFa.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""


class People:
    def __init__(self, name: str, age: int, sex: str):
        self.name = name
        self.age = age
        self.sex = sex


if __name__ == "__main__":
    people = People("hangman", 18, "nv")
    print(people)

结果

<__main__.People object at 0x7fdb6cb9af40>

str

"""
@File    :   MyMoFa.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""


class People:
    def __init__(self, name: str, age: int, sex: str):
        self.name = name
        self.age = age
        self.sex = sex

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


if __name__ == "__main__":
    people = People("hangman", 18, "nv")
    print(people)

结果

名字是:hangman,年龄是18

repr

"""
@File    :   MyMoFa.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""


class People:
    def __init__(self, name: str, age: int, sex: str):
        self.name = name
        self.age = age
        self.sex = sex

    def __repr__(self):
        """
        默认情况下,__repr__() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
        :return: 我们自己定义的对象格式
        """
        return self.name


if __name__ == "__main__":
    people = People("hangman", 18, "nv")
    print(people)

结果

hangman

str 和 repr

上面我们也看到了,好像这俩也没什么区别呀,那放到一起会怎么样

"""
@File    :   MyMoFa.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""


class People:
    def __init__(self, name: str, age: int, sex: str):
        self.name = name
        self.age = age
        self.sex = sex

    def __repr__(self):
        """
        默认情况下,__repr__() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
        :return: 我们自己定义的对象格式
        """
        return self.name

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


if __name__ == "__main__":
    people = People("hangman", 18, "nv")
    print(people)

结果

名字是:hangman,年龄是18

我们发现执行的是__str__

所以建议这两个只要使用一个即可,推荐使用str

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值