在python类中或者文档中我们经常能看到一个方法__str__(),这个方法的存在意义是什么?主要是用来重写类或对象信息,也可以用来描述类的用法等信息。下面就来看看__str__()方法的具体用法。
首先我们新建一个类实现__str__()方法,然后和python基类object进行对比。
class Dog(object):
name = 'Tom'
def __init__(self):
self.sex = 'man'
self.age = 19
d = Dog()
print(object)
print(Dog)
print(d)
返回结果:
<class 'object'>
<class '__main__.Dog'>
<__main__.Dog object at 0x0000000001DCA460>
从返回结果我们可以看出来这三种的区别,object输出结果是就是类和类名,Dog输出结果是类,地址和类名,输出对象的结果是地址,对象父类名以及存储地址 。对比着三种情况,我们最想看到的一般是第一种,而这个真实object类帮我们写好的。文档如下
class object:
def __str__(self, *args, **kwargs): # real signature unknown
""" Return str(self). """
pass
通过仿照文档,我们来给Dog类的__str__()方法重写。
class Dog(object):
name = 'Tom'
def __init__(self):
self.sex = 'man'
self.age = 19
def __str__(self):
return '%s性别是%s,年龄是%d' % (Dog.name, self.sex, self.age)
d = Dog()
print(d) # 没有__str__只会返回:<__main__.Dog object at 0x0000000001E12CD0>
print(str(d)) # 通过str()函数也能实现对象信息展现,注意这里要借助于重写函数
返回结果:
Tom性别是man,年龄是19
Tom性别是man,年龄是19
上面就是我们想要的结果了,通过__str__()方法我们可以对对象信息进行重写。上面的代码中还有一个str()函数,大家都只带str()函数是转字符串的函数,在这里也同时能实现一样的效果。
除此之外我们还有一种内置函数能实现类似的功能,但是两者也有些区别,__str__()方法主要是面向用户的,另一种方法__repr__()主要是面向开发人员的。下面来演示一下
class Dog(object):
name = 'Tom'
def __init__(self):
self.sex = 'man'
self.age = 19
def __repr__(self):
return 'repr' # 可以通过__repr__实现对对象本身的重新描述
# <__main__.Dog object at 0x00000000021B2CD0> ----> repr
d = Dog()
print(d)