复习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__方法

31.Python面向对象str和repr原理魔法方法__call__和__new__方法单例模式

python类中几个特殊方法

python一些定制方法(函数)