天天看點

python中self、_init_和__name__

初學python,記錄一些基本的東西吧

1、self

類的方法與普通的函數隻有一個特别的差別——它們必須有一個額外的第一個參數名稱,但是在調用這個方法的時候你不為這個參數指派,Python會提供這個值。這個特别的變量指對象本身,按照慣例它的名稱是self。Python中的self等價于C++中的self指針和Java、C#中的this。

假如你有一個類稱為MyClass和這個類的一個執行個體MyObject。當你調用這個對象的方法MyObject.method(arg1, arg2)的時候,這會由Python自動轉為MyClass.method(MyObject, arg1, arg2)——這就是self的原理了。

這也意味着如果你有一個不需要參數的方法,你還是得給這個方法定義一個self參數。

python中self、_init_和__name__

聲明add()方法時,若不加self,則提示

TypeError: add() takes exactly 2 arguments (3 given)

File "D:\PythonWorkplace\PythonDemo\Tet.py", line 15, in <module>  test.add(1,3) 錯誤。

2、_init_

首先來看init單詞本身,其含義是 初始化。而__init__的含義,也如同其單詞本意一樣,用來初始化。當一個Class,稍微複雜一點的時候,或者内部函數需要用得到的時候,往往都需要在,别人執行個體化你這個類之前,使用你這個類之前,做一些基本的,與自己的類有關的,初始化方面的工作。而這部分工作,往往就放到__init__函數中去了。

3、__name__

當你打開一個.py檔案時,經常會在代碼的最下面看到if __name__ == '__main__':,現在就來介 紹一下它的作用.

        子產品是對象,并且所有的子產品都有一個内置屬性 __name__。一個子產品的 __name__ 的值取決于您如何應用子產品。如果 import 一個子產品,那麼子產品__name__ 的值通常為子產品檔案名,不帶路徑或者檔案擴充名。但是您也可以像一個标準的程式樣直接運作子產品,在這 種情況下, __name__ 的值将是一個特别預設"__main__"。

在cmd 中直接運作.py檔案,則__name__的值是'__main__';

而在import 一個.py檔案後,__name__的值就不是'__main__'了;

進而用if __name__ == '__main__'來判斷是否是在直接運作該.py檔案

如:

#Test.py

class Test:

    def __init(self):pass

    def f(self):print 'Hello, World!'

if __name__ == '__main__':

    Test().f()

#End

你在cmd中輸入:

C:>python Test.py

Hello, World!

說明:"__name__ == '__main__'"是成立的

你再在cmd中輸入:

C:>python

>>>import Test

>>>Test.__name__                #Test子產品的__name__

'Test'

>>>__name__                       #目前程式的__name__

'__main__'

無論怎樣,Test.py中的"__name__ == '__main__'"都不會成立的!

是以,下一行代碼永遠不會運作到!