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__
創建對象的方法。