日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一日一技:如何讓Python提醒你不能覆蓋某個(gè)父類方法?

在前幾天的文章:一日一技:在 Python 里面如何實(shí)現(xiàn)一個(gè)抽象類中,我們講到Python 可以實(shí)現(xiàn)一個(gè)抽象類。抽象類里面有一些抽象方法,在繼承這個(gè)抽象類的時(shí)候,子類必須實(shí)現(xiàn)這些抽象方法。

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)公司將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。

有時(shí)候,我們希望在父類中保留一些方法,子類在繼承父類的時(shí)候,不準(zhǔn)覆蓋這些方法。這個(gè)功能,在 Java 中叫做@final。

Python 原生的語句和關(guān)鍵詞,無法禁止開發(fā)者覆蓋父類的某個(gè)方法。但是,如果你需要的不是禁止,而是在你不小心覆蓋的時(shí)候,Python 能提醒你的話,那么 Python 從3.8開始就能原生做到。這就是類型標(biāo)注中的final關(guān)鍵字。

如果你不知道什么叫做類型標(biāo)注,或者不知道它有什么用,那么你可以看我以前的兩篇文章:《一日一技:在Python中使用類型標(biāo)注》、《一日一技:通過Python 3的類型標(biāo)注提高PyCharm的自動(dòng)補(bǔ)全能力》。

要使用這個(gè)功能,有一個(gè)前提,就是你需要使用 PyCharm 或者 VSCode 這種支持識(shí)別類型標(biāo)注的 IDE,或者你的項(xiàng)目使用 mypy 來做靜態(tài)檢查。我們以 PyCharm 為例。

打開 PyCharm,我們來寫一個(gè)類:

 
 
 
 
  1. class Animal:
  2.     def walk(self):
  3.         ...
  4.     def dead(self):
  5.         print('所有生物都會(huì)死亡,沒有例外')
  6. class Dog(Animal):
  7.     def __init__(self, name):
  8.         self.name = name
  9.     
  10.     def walk(self):
  11.         print('使用四只腳走路')
  12.     def dead(self):
  13.         print('狗不會(huì)死亡')
  14. wangcai = Dog('旺財(cái)')
  15. wangcai.walk()
  16. wangcai.dead()

運(yùn)行效果如下圖所示:

可以看到,子類Dog覆蓋了父類Animal里面的兩個(gè)方法walk和dead。現(xiàn)在,我不想讓開發(fā)者覆蓋dead方法,如果發(fā)現(xiàn)他覆蓋了,就要通過 IDE 發(fā)出提醒。這個(gè)時(shí)候,就可以使用final關(guān)鍵詞,如下圖所示:

我們只需要from typing import final,然后使用這個(gè)裝飾器@final來裝飾不想被覆蓋的方法,那么,當(dāng)子類試圖覆蓋它的時(shí)候,IDE 就會(huì)通過黃色的背景來提醒你這個(gè)地方有問題。

在 typing 里面,除了final裝飾器,還有一個(gè)Final類型。這個(gè)類型可以用來設(shè)定常量,例如:

 
 
 
 
  1. from typing import Final
  2. PI: Final[float] = 3.141592653
  3. PI = 3.2

運(yùn)行效果如下圖所示:

但需要注意的是,類型標(biāo)注起的是提醒的作用,如果你要不顧提醒強(qiáng)行違反也沒有問題。

本文說到的是如何提醒開發(fā)者不要覆蓋父類方法。我們也可以通過自定義一個(gè)裝飾器,來實(shí)現(xiàn)真正禁止其他人覆蓋父類的方法。發(fā)現(xiàn)覆蓋就報(bào)錯(cuò)。如果大家有興趣,請(qǐng)?jiān)诒疚南旅媪粞?,我們下一篇文章就寫?/p>

本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code生公眾號(hào)。


網(wǎng)站標(biāo)題:一日一技:如何讓Python提醒你不能覆蓋某個(gè)父類方法?
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/cohcseh.html