iOS開發人員如何學習Python程式設計22-補充1
這是我參與11月更文挑戰的22天,活動詳情檢視:2021最後一次更文挑戰。
程式主入口
很多時候,我們經常在python
程式中看到這麼一行語句:
if __name__ == '__main__'
1. __name__
是所有模組都會有的一個內建屬性。
2. 一個模組的__name__
值取決於你如何呼叫模組。
假如你有一個test.py
檔案,如果在a.py
檔案中使用import
匯入這個模組import test.py
,那麼test.py
模組的__name__
屬性的值就是test
,不帶路徑或者副檔名。
其實順序執行,簡單來說就是程式碼按照從上到下的順序來執行。
魔法方法
在Python
中,有一些內建好的特定方法,這些方法在進行特定的操作時會自動被呼叫,稱為魔法方法。\
魔法方法的命名總是被雙下劃線包圍:
- __名稱__
常用魔法方法
1. __doc__
__doc__
用來檢視類的說明文件:
print(list().__doc__)
- 檢視自定義類的說明文件:
```
class Demo(object):
"""
我是註釋
"""
pass
d = Demo() print(d.doc) ```
2. __module__
__module__
用來檢視當前操作的類所在模組。當執行模組是類所在模組時,執行結果為__main__
。否則,執行結果是類所在模組的名稱。
3. __class__
__class__
用來檢視當前物件的類。
4. __dict__
__dict__
用於獲取類或者例項的屬性字典
⚠️注意:
- 普通欄位儲存在物件中,所以通過
物件.__dict__
獲取的是普通欄位 - 除普通欄位以外的成員都儲存在類中,所以通過
類.__dict__
來獲取。
5. __del__()
__del__()
方法也叫做析構方法。當由該類建立的例項物件,被刪除或者說在記憶體中被釋放,將會自動觸發執行。
⚠️注意:
- 當代碼全部執行完畢才自動觸發
__del__()
- 如果需要提前觸發,則需要通過
del
關鍵字,刪除所有物件後觸發__del__()
- 此方法一般不需要定義,因為
Python
是一門高階語言,程式設計師在使用時無需關心記憶體的分配與釋放,一般都是交給Python
直譯器來執行。所以,解構函式的呼叫是由直譯器在進行垃圾回收時自動觸發執行。
6. __call__()
__call__()
方法用於將物件變成一個可呼叫的物件。也就是說,當一個類中有__call__()
方法時,其例項化得到的物件便是可呼叫的(callable
):
```
class Demo(object):
pass
d = Demo()
d() # TypeError: 'Demo' object is not callable
class Demo(object):
pass
d = Demo() d() # TypeError: 'Demo' object is not callable ```
7. __new__()
__new__()
方法用於建立與返回一個物件。在類準備將自身例項化時呼叫:
``` class Demo(object): def init(self): print("init")
def __new__(cls, *args, **kwargs):
print("__new__")
d = Demo() ```
⚠️注意:
__new__()
方法用於建立物件;__init__()
方法在物件建立的時候,自動呼叫;- 但是此處重寫了父類的
__new__()
方法,覆蓋了父類__new__()
建立物件的功能,所以物件並沒有建立成功。所以僅執行__new__()
方法內部程式碼。
物件建立執行順序
- 通過
__new__()
方法建立物件; - 並將物件返回,傳給
__init__()
。
``` class Demo(object): def init(self): print("init")
def __new__(cls, *args, **kwargs):
print("__new__")
return super().__new__(cls)
d = Demo() ```
⚠️注意:
- 在建立物件時,一定要將物件返回,在會自動觸發
__init__()
方法; __init__()
方法當中的self
,實際上就是__new__
返回的例項,也就是該物件;__init__()
與__new__()
區別;__init__
例項方法,__new__
靜態方法;__init__
在物件建立後自動呼叫,__new__
建立物件的方法。