python学习-类(global、nonlocal、继承、多态)
文章目錄
- global與nonlocal
- 繼承和多態
global與nonlocal
1.函數內部定義的為局部變量,其作用域是局部作用域,函數外無法調用的
2.函數外定義的為全局變量,其作用域是全局作用域,如果在函數內想要進行修改,需要使用global修飾變量
3.外層函數的變量,如果想要在內層函數進行修改,需要nonlocal
關于這部分,有一篇博文寫得很詳細,通過看他的這篇博文,我已經看懂了兩個修飾詞的作用。
python:函數作用域 global與nonlocal
大家感興趣的可以去看看。上一段我修改過的代碼:
這是對網上的一段代碼進行了改進,別人的那個示例按照順序,容易誤導別人。大家關注我這里do_global和do_nonlocal的調用順序。
運行結果:
剛開始看別人的代碼,我很疑惑,為什么別人的運行結果,調用了global,結果還是nonlocal,見下圖:
后面仔細理解才發現,因為沒有全局變量spam,所以執行了global修飾的spam,并沒有什么作用。而是直接打印了spam,由于上一次執行了nonlocal spam,所以spam的結果是nonlocal spam。
然后我的代碼里面,do_nonlocal也是用的global span,而不是用nonlocal span,是因為沒有局部變量span,編譯會報錯。
這里說明一個問題,global 修飾的變量可以不存在,編譯不會報錯,nonlocal修飾的變量必須要存在,否則編譯會報錯。
下面用一段代碼驗證:
編譯報錯:
表示str1不能用nonlocal修飾。
這段代碼把test2里面的nonlocal str1改成了global str1,然后輸出也加了打印語句,運行結果:
因為先調用test3,使用了global str2,并且str2 = ‘str2_test3’,但是在運行以后,打印出來的str2任然是456,這就說明了,global修飾了str2,但是沒有全局str2,編譯不會報錯,運行也不會報錯。
再次調用test3,結果為:str2_test2,并沒有對str2的值有改變。
繼承和多態
劃重點:
Python 中所有的方法實際上都是 virtual 方法。
這和其他語言不一樣。
運行結果:
這里體現了子類中重載函數時,可以先調用基類中的方法,然后再繼續實現自己的功能。
除了單重集成以外,還可以有多重繼承,原理和單重繼承一樣,這里就不再細說了。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python学习-类(global、nonlocal、继承、多态)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 掌阅 iReader 电纸书 Ocean
- 下一篇: python学习-类(类方法、实例方法、