1. 程式人生 > >(轉載)python 類中 __call__與__init__

(轉載)python 類中 __call__與__init__

轉載自:

https://blog.csdn.net/u011510825/article/details/79770303

請去檢視原文。

 

 

 

 

最近看到專案中有人用了__call__,google了學習一下

__init__應該大家都知道,還是說一下,就是類的構造器,初始化一個類(建立一個類的例項)

class Student(object):
 
 
    def __init__(self, name):
        self.name = name

呼叫的時候是這樣的

>>> a = Student('jack')
>>> a.name
'jack'

__call__的話,它的作用是可以讓 一個類的例項像函式一樣被呼叫,如 可以像函式一樣呼叫上面的a(‘jack2’),相當於a.__call__(‘jack2’)

class Student(object):
    def __init__(self, name):
        self.name = name
    def __call__(self, name):
        self.name = name

現在演示一下

>>> a = Student('jack')
>>> a.name
'jack'
>>> a('jack2’)
>>> a.name
‘jack2'

那麼__call__的作用是什麼呢?
__call__ 在那些類的例項經常改變狀態的時候會非常有效。呼叫這個例項是一種改變這個物件狀態的直接和優雅的做法。用一個例項來表達最好不過了。
嗯,沒錯就是

1.為了讓程式碼更優雅和直接

2.方便改變例項中的一些變數(大部分應該改變狀態)