首页 python基础教程 Python面向对象-对象信息重写方法(__str__())
pay pay

Python面向对象-对象信息重写方法(__str__())

日期: 2021年12月4日 05:33
栏目: python基础教程
阅读: 119
作者: python自学网

摘要: 在python类中或者文档中我们经常能看到一个方法__str__(),这个方法的存在意义是什么?主要是用来重写类或对象信息,也可以用来描述类的用法等信息。下面就来看看__str__()方法的具体用法。

在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)

 

目录
回顶部