复习python的__call__ __str__ __repr__ __getattr__函数 整理
Posted 玫瑰丛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复习python的__call__ __str__ __repr__ __getattr__函数 整理相关的知识,希望对你有一定的参考价值。
class Www:
def __init__(self,name):
self.name=name
def __str__(self):
return ‘名称 %s‘%self.name
#__repr__=__str__ *这是在__str__转换__repr__函数的偷懒小方法
#__str__函数是可以直接把对实例进行调用并得到使用
‘‘‘
交互模式:
方法一
>>> print(Www(‘实验‘))
方法二
>>> s=Www(‘实验‘)
>>> print(s)
‘‘‘
class Qqq:
def __init__(self,name):
self.name=name
def __repr__(self):
return ‘名称 %s‘%self.name
#__repr__函数是可以直接把对实例进行调用并得到使用
‘‘‘
交互模式:
方法一
>>> print(Qqq(‘实验‘))
方法二
>>> a=Qqq(‘实验‘)
>>> a
‘‘‘
class St:
def __init__(self):
self.mame==‘小智‘
def __getattr__(self,attr):#这个函数和__init__一样不能形参多了
if attr==‘yyb‘:
return ‘通过‘
else:
return ‘失败‘
‘‘‘
__getattr__这个函数是调用不存在的属行(如yyb),pyhon会调用__getattr__(self,‘yyb‘)
尝试获取属性,这样就有机会返回 yyb 的值.
交换模式:
>>> s.St()
>>> s.yyb
‘‘‘
class Ooo:
def __init__(self,name):
self.name=name
def __call__(self):
return ‘名称 %d‘%self.name
‘‘‘
__call__,__str__,__repr__三个函数都很像,但每个细节上是有不同的,然而这个__call__函数是可以直接把对实例进行调用并得到使用。
嗯,确实这一点__str__ __repr__ 这两个也是一样的但 __str__ 函数是干关于字符串的事(__call__ 正好补漏,如若强行__str__调用字符串以外的也可以),
__repr__ 函数相当于 __str__的一种偏调试服务型的。
交互模式:
>>> s=Ooo()
>>> s()
‘‘‘
以上是关于复习python的__call__ __str__ __repr__ __getattr__函数 整理的主要内容,如果未能解决你的问题,请参考以下文章
31.Python面向对象str和repr原理魔法方法__call__和__new__方法单例模式
在python中,为什么mock_calls在调试模式下运行时调用.__ str __()调用的次数不一致?
python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法