複習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('實驗'))get

方法二
>>> s=Www('實驗')it

>>> print(s)
'''
class Qqq:
  def __init__(self,name):
    self.name=name
  def __repr__(self):
    return '名稱 %s'%self.name
#__repr__函數是能夠直接把對實例進行調用並獲得使用class

'''
交互模式:方法

方法一
>>> print(Qqq('實驗'))call

方法二
>>> a=Qqq('實驗')qq

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

'''

相關文章
相關標籤/搜索