python之__str__方法使用

代码实例中的python版本:3.6

__str__方法用于返回对象的描述信息,如果不使用__str__方法,直接print,或者return,返回的是对象的内存地址。如果在__str__中定义了描述信息,print或者return时,返回的就不是内存地址,显示更友好,实现了类到字符串的转化。

实例:
1、没有使用__str__方法返回的结果

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

    def school(self):
        print("我的学校是...")

    def subject(self):
        print("我的学科")

    def introduce(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))

zs = Student("张三", 20)
ls = Student("李四", 18)
print(zs)
print(ls)
ls.school()
zs.subject()
zs.introduce()

结果:
<__main__.Student object at 0x000001B26CB101D0>
<__main__.Student object at 0x000001B26CB10208>
我的学校是...
我的学科
姓名:张三,年龄:20

2、使用__str__方法返回的结果

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

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

    def school(self):
        print("我的学校是...")

    def subject(self):
        print("我的学科")

    def introduce(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))

zs = Student("张三", 20)
ls = Student("李四", 18)
print(zs)
print(ls)
ls.school()
zs.subject()
zs.introduce()

结果:
张三的年龄是:20
李四的年龄是:18
我的学校是...
我的学科
姓名:张三,年龄:20

3、两个方法的区别:

a、调用的时机不同,__str__是在生成对象
b、列表以及字典等容器总是会使用 __repr__ 方法。即使你显式的调用 str 方法,也是如此。
c、我们需要显示的指定以何种方式进行类到字符串的转化,我们可以使用内置的 str()repr() 方法,它们会调用类中对应的双下划线方法。
d、__str__ 的返回结果可读性强,得到便于人们阅读的信息。__repr__ 的返回结果应更准确,__repr__ 存在的目的在于调试,便于开发者使用。将 __repr__ 返回的方式直接复制到命令行上,是可以直接执行的。
e、自己写class的时候要加__repr__,如果没有添加 __str__ 方法,Python 在需要该方法但找不到的时候,它会去调用 __repr__ 方法。因此,在写自己的类的时候至少添加一个 __repr__ 方法,这能保证类到字符串始终有一个有效的自定义转换方式。
f、在同一个类中,同时有__str__,__repr__,默认调用的是__str__。
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

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

    def school(self):
        print("我的学校是...")

    def subject(self):
        print("我的学科")

    def introduce(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))

    def __repr__(self):
        return "__repr__:{0}:{1}".format(self.name,self.age)

zs = Student("张三", 20)
ls = Student("李四", 18)
print(zs)
print(ls)
print("str调用:" + str(zs))
print("repr调用:" + repr(zs))
print("容器:" + str([ls]))

结果:
张三的年龄是:20
李四的年龄是:18
str调用:张三的年龄是:20
repr调用:__repr__:张三:20
容器:[__repr__:李四:18]
  • 20
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值