面向对象_内置函数与内置方法

Posted accolade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象_内置函数与内置方法相关的知识,希望对你有一定的参考价值。

老师的博客关于此知识点 http://www.cnblogs.com/Eva-J/articles/7351812.html#_label7

__str__和__repr__

改变对象的字符串显示__str__,__repr__

先来看一段代码

class Course:
    belong_to=old boy
    def __init__(self,name,number,site,teacher):
        self.name=name
        self.number=number
        self.site=site
        self.teacher=teacher
    def __str__(self):
        print(我执行了__str__)
        return 好像写重复了,不管了,我执行了__str__方法                申明一下我的返回值 必须是字符串的类型
    def __repr__(self):
        print(我执行了__repr__操作)
        return 我是__repr__的返回值,我的返回值也必须是str类型
    def fun(self):
        print(我就是是个弟弟,func功能而已)
python =Course(python,92,张家界,alex)
print(python)#直接打印对象时,如果类的里面有__str__方法时,会调用__str__方法,并且返回return的值
            # 此时调用的是Course里的__str__的方法
num= 1
print(num)#此时调用的是int 中的__str__方法
‘‘‘输出结果我执行了__str__
好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型
1‘‘‘

 

注意事项和解释写在代码里面了

接着上面的代码

print(我是测试的下面是内容:
%s%python)
‘‘‘

我执行了__str__
我是测试的下面是内容:
好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型

‘‘‘

 

以上可见,当print是如果里面有%s,%对象名时,也执行了__str__的方法,并且接受了其返回值,并打印了出来

同样,接着上面的的代码,来看如下:


print(str(python))
‘‘‘输出结果我执行了__str__ 
好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型
‘‘‘

再来看如下代码

print(%r%python)
print(repr(python))
‘‘‘输出结果:我执行了__repr__操作
我是__repr__的返回值,我的返回值也必须是str类型
我执行了__repr__操作
我是__repr__的返回值,我的返回值也必须是str类型
‘‘‘

 

 

同理此时也是调用了对象中的__str__方法,并接受打印了返回值

总结一下:当一个类,对象中有__str__方法时,当print是有3中情况会调用__str__,并接受和打印其返回值

  1.直接打印对象时 print(对象)

  2.打印是有%s时,并且表明%s就是object(对象)时。print(‘内容%r)%对象,有点像格式化输出

  3.print(str(对象))

执行__repr__时候

  1.print(‘%r’%对象)

  2.3.print(repr(对象))

__str__与__repr__的返回值必需是字符串的形式

 值得注意的是,当没有__str__,但有__repr__时,__repr__变充当了__str__的角色,执行__repr__方法,并接受其返回值,打印出来

print(obj)/‘%s‘%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串
如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
repr(),只会找__repr__,如果没有找父类的

 

以上是关于面向对象_内置函数与内置方法的主要内容,如果未能解决你的问题,请参考以下文章

python-38-用于面向对象的内置函数

面向对象的内功心法

python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)

python面向对象常用内置方法

面向对象之内置方法

面向对象super内置函数(转)