最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中使用雙下劃線防止類屬性被覆蓋問題

 更新時間:2019年06月27日 14:27:33   投稿:mrr  
這篇文章主要介紹了Python中使用雙下劃線防止類屬性被覆蓋,需要的朋友可以參考下

在使用Python編寫面向?qū)ο蟮拇a時,我們會常常使用“繼承”這種開發(fā)方式。例如下面這一段代碼:

class Info:
  def __init__(self):
    pass
  def calc_age(self):
    print('我是父類的方法')
class PeopleInfo(Info):
  def __init__(self):
    super().__init__()
  def calc_age(self):
    print(123456)

如果你使用 PeopleInfo 初始化一個對象,然后調(diào)用這個類的 calc_age 方法,我們來看看運行效果,如下圖所示:

 

可以看出,父類 Info 里面的 calc_age 被子類里面的 calc_age 給“覆蓋”了。

到目前為止,應該都是你已經(jīng)知道的東西。那么下一個問題,請問 PeopleInfo 里面的 __init__ 會不會覆蓋 Info 里面的 __init__ ?

為了確認這一點,我們來測試一下:

class Info:
  def __init__(self):
    print('我是父類的__init__')
  def calc_age(self):
    print('我是父類的方法')
class PeopleInfo(Info):
  def __init__(self):
    super().__init__()
    print('我是之類的初始化方法')
  def calc_age(self):
    print(123456)

運行效果如下圖所示:

 

這里你發(fā)現(xiàn)父類和子類的 __init__ 都被運行了。

不過你可能會強行解釋為:在子類的 __init__ 里面,有一行 super().__init__() ,這個地方可能子類還沒有完全覆蓋父類,所以先運行了父類的方法。等到子類的 __init__ 全部執(zhí)行完成以后,才會覆蓋父類。

當然,這種強行詭辯顯然是錯誤的,但為了證明這里你看到的現(xiàn)象和這個 super().__init__() 沒有任何關(guān)系,我們不使用 __init__ ,而是自己定義一個:

class Info:
  def __init__(self):
    pass
  def __calc_age(self):
    print('我是父類的方法')
  def run_father(self):
    self.__calc_age()
class PeopleInfo(Info):
  def __init__(self):
    super().__init__()
    pass
  def __calc_age(self):
    print(123456)
  def run_son(self):
    self.__calc_age()

運行效果如下圖所示:

 

從這里可以看出,父類和子類的 __calc_age 都成功運行了。

這是因為,在Python里面,類方法或者屬性如果以雙下劃線開頭,那么他們就是類的私有方法,在被繼承的時候,即使子類有相同名字的以雙下劃線開頭的屬性或者方法也不會覆蓋父類。

而且這些以雙下劃線開頭的私有方法或者屬性,在類內(nèi)部可以自由被其他方法調(diào)用,但是在實例對象里面是不能直接調(diào)用的,如下圖所示:

 

那么Python是如何實現(xiàn)這一點的呢?實際上Python僅僅是改了一個名字而已。我們使用 dir 函數(shù)看看實例對象 kingname 里面有哪些內(nèi)容,如下圖所示:

 

大家請注意方框框住的內(nèi)容,其中的 _Info__calc_age 就是父類中的 __calc_age ,而 _PeopleInfo__calc_age 就是子類中的 __calc_age 。Python僅僅是改了一個名字,在這種雙下劃線的私有方法或者私有屬性的前面加上了 _類名 ,這樣就確保了子類和父類的方法名不一致。

所以,雖然 在規(guī)范上,這種雙下劃線的私有方法和私有屬性是不應該在外部訪問的 ,但是如果你想強行訪問,可以個使用這種改名以后的名字:

kingname = PeopleInfo()
kingname._PeopleInfo__calc_age() # 強行調(diào)用子類的私有方法
kingname._Info__calc_age() # 強行調(diào)用父類的私有方法

運行效果如下圖所示:

 

總結(jié)

以上所述是小編給大家介紹的Python中使用雙下劃線防止類屬性被覆蓋問題,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關(guān)文章

  • Python tkinter之Bind(綁定事件)的使用示例

    Python tkinter之Bind(綁定事件)的使用示例

    這篇文章主要介紹了Python tkinter之Bind(綁定事件)的使用詳解,幫助大家更好的理解和學習python的gui開發(fā),感興趣的朋友可以了解下
    2021-02-02
  • 使用PowerShell實現(xiàn)批量修改或替換文件名

    使用PowerShell實現(xiàn)批量修改或替換文件名

    這篇文章主要為大家介紹了基于PowerShell語言,對文件夾中全部文件的名稱加以批量替換、修改的方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-04-04
  • Python的高階函數(shù)用法實例分析

    Python的高階函數(shù)用法實例分析

    這篇文章主要介紹了Python的高階函數(shù)用法,結(jié)合實例形式分析了Python針對字符串、列表轉(zhuǎn)換、運算、過濾等操作函數(shù)相關(guān)使用技巧與注意事項,需要的朋友可以參考下
    2019-04-04
  • python?groupby函數(shù)實現(xiàn)分組選取最大值與最小值

    python?groupby函數(shù)實現(xiàn)分組選取最大值與最小值

    這篇文章主要介紹了python?groupby函數(shù)實現(xiàn)分組選取最大值與最小值,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • python怎么創(chuàng)建新文件代碼舉例

    python怎么創(chuàng)建新文件代碼舉例

    Python創(chuàng)建新文件有多種方法,包括使用open函數(shù)、with語句和Pathlib模塊,這篇文章主要給大家介紹了關(guān)于python怎么創(chuàng)建新文件的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Python利用Turtle繪制哆啦A夢和小豬佩奇

    Python利用Turtle繪制哆啦A夢和小豬佩奇

    turtle庫是python的基礎(chǔ)繪圖庫,經(jīng)常被用來介紹編程知識的方法庫,是標準庫之一,利用turtle可以制作很多復雜的繪圖。本文將為大家介紹通過turtle庫繪制制哆啦A夢和小豬佩奇,感興趣的小伙伴可以學習一下
    2022-04-04
  • Python 注解方式實現(xiàn)緩存數(shù)據(jù)詳解

    Python 注解方式實現(xiàn)緩存數(shù)據(jù)詳解

    這篇文章主要介紹了Python 注解方式實現(xiàn)緩存數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-10-10
  • Flask框架的學習指南之制作簡單blog系統(tǒng)

    Flask框架的學習指南之制作簡單blog系統(tǒng)

    本文是Flask框架的學習指南系列文章的第二篇主要給大家講述制作一個簡單的小項目blog系統(tǒng)的過程,有需要的小伙伴可以參考下
    2016-11-11
  • pybaobabdt庫基于python的決策樹隨機森林可視化工具使用

    pybaobabdt庫基于python的決策樹隨機森林可視化工具使用

    這篇文章主要為大家介紹了pybaobabdt庫基于python的決策樹隨機森林可視化工具使用探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-02-02
  • numpy數(shù)組切片的使用

    numpy數(shù)組切片的使用

    本文主要介紹了numpy數(shù)組切片的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論

平远县| 南昌市| 饶阳县| 高阳县| 洪湖市| 安泽县| 泰来县| 宜昌市| 蒲城县| 卓资县| 兰考县| 宜良县| 五华县| 治县。| 莱州市| 江津市| 三亚市| 都江堰市| 桐庐县| 余干县| 广东省| 岳阳市| 资兴市| 辰溪县| 青岛市| 虎林市| 城市| 奎屯市| 忻城县| 绍兴市| 达拉特旗| 定西市| 新营市| 朝阳区| 施甸县| 尉犁县| 吉水县| 新巴尔虎右旗| 石林| 双牌县| 龙胜|