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