<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      python進階(五)~~~多態和屬性訪問

      面向對象三大特征:

      封裝:將數據和方法放在一個類中,構成封裝

      繼承:子類繼承父類屬性和方法,可多繼承

      多態:一個事物有多種形態,一個抽象類有多個子類,不同的子類對象調用相同的方法,產生不同的執行結果。多態可以增加代碼的靈活度。是基于類的繼承。

      class Animal:
          def run(self):
              raise AttributeError('子類必須實現這個方法')
       
      class Pig(Animal):
          def run(self):
              print('pig is walking')
       
      class Dog(Animal):
          def run(self):
              print('dog is running')
       
      def func(obj):  # python的函數參數 無任何類型限制,可以是類本身,也可以是類的對象
          obj.run()
      
      pig1=Pig()
      d1=Dog()
       
      func(pig1)
      func(d1)

      多態的意義:開放封閉原則

        對于一個變量,我們只需要知道它的Base類型,無需知道它的子類型,就可以放心的調用相同的方法quack();

        當需要新增功能時,只需新增一個Base的子類實現quack()方法,就可以在原基礎上擴展功能,即開放封閉原則:

              對擴展開放:允許新增一個Base的子類;

              對修改封閉:不要修改Base依賴類型的quack()函數;

      鴨子類型

      鴨子類型關注點在對象的行為,而不是類型。不要求嚴格的繼承體系。只要行為相似(內部實現相同的方法),即可視為鴨子類型。

      class Duck:
          def __init__(self, name):
              self.name = name
       
          def quack(self):
              print("gua gua")
       
      class Man:
          def __init__(self, name):
              self.name = name
       
          def quack(self):
              print("女王大人")
       
      def do_quack(ducker):
          ducker.quack()
       
      if __name__ == '__main__':
          d = Duck('duck')
          m = Man('man')
          do_quack(d)
          do_quack(m)

      數據類型和自省:

      1. 私有屬性:類里面定義的屬性分為兩種:公有屬性和私有屬性

      2. 私有屬性定義:

        以單下劃線開頭_attr :類外部可以直接調用

        以雙下劃線開頭的屬性__attr:類外部不能直接調用,被改名了,需要用 _類名__attr 訪問;

      class People:
       
          # 初始化參數
          def __init__(self, name):
              self.name = name
              self.__age = 18  # 在需要設置的屬性或方法前加雙下劃線,即設置私有屬性或私有方法
       
          def display(self):
              print('%s的年齡是%d' % (self.name, self.__age))
       
      XiaoAi = People('小愛同學')
       
      # 此時age屬性為私有屬性,不能進行外部訪問,否則會報錯
      # print(XiaoAi.__age)
       
      # 以單下劃線+類名的顯示,可以訪問私有屬性
      print(XiaoAi._People__age)
       
      XiaoAi.display()

      3. python不能實現真正的私有屬性,但通過下劃線開頭,可以得到偽私有屬性。大部分python代碼遵循規則:以下劃線開頭的屬性為私有屬性,被視為非公開的API的一部分,僅用于實現細節。

      4. __dict__: 類.__dict__:返回該類 屬性、方法的字典;實例.__dict__:返回實例的 屬性、方法字典;實例.方法.__dict__:返回方法的 屬性、方法字典

          __doc__: 類.__doc__:返回該類的注釋說明;實例.方法.__doc__:返回方法的注釋說明 ;模塊.__doc__:返回py文件模塊的注釋說明文檔

          __slots__:類的屬性范圍鎖定,僅允許綁定__slots__= [ ]列表中已有的屬性,可節約內存,提高性能。

      自定義屬性訪問

      內置函數:

      getattr: 獲取屬性 ,觸發魔術方法 object.__getattr__()

      setattr: 設置屬性,觸發魔術方法 object.__setattr__()

      delattr: 刪除屬性,觸發魔術方法 object.__delattr__()

      1. object.__getattr__:當我們訪問屬性的時候,如果屬性不存在(出現AttrError),該方法會被觸發。

      2.object.__getattrible__: 訪問屬性的時候,第一時間觸發該方法去找屬性。如果沒找到觸發AttrError。當我們去訪問一個不存在的屬性時,首先會觸發__getattribute__,然后才會觸發__getattr__ 
      如果屬性存在,就返回這個屬性值,如果沒有就報 AttrError

      3.object.__setattr__:設置屬性

      4.object.__delattr__:刪除屬性

       

      posted @ 2020-02-08 02:13  青域  閱讀(242)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲欧洲av一区二区| 国产一区二区三区亚洲精品| 久久月本道色综合久久| 铜梁县| 四虎亚洲国产成人久久精品 | 亚洲国产成人久久综合野外 | 成人午夜av在线播放| 中文字幕少妇人妻精品| 少妇人妻偷人免费观看| 亚洲综合色区另类av| 九九热视频在线播放| 国产精品亚洲精品日韩已满十八小| 欧美成人影院亚洲综合图| 石原莉奈日韩一区二区三区| 怡红院一区二区三区在线| 国产精品中文字幕免费| 欧美日韩一线| 97免费在线观看视频| 亚洲成av人片天堂网无码| 饥渴的熟妇张开腿呻吟视频| 日韩成人福利视频在线观看| 性奴sm虐辱暴力视频网站| 精品免费看国产一区二区| 精品一卡2卡三卡4卡乱码精品视频 | 亚洲欧洲中文日韩久久av乱码| 亚洲自拍偷拍中文字幕色| 久久99久国产精品66| 丰满人妻一区二区三区色| 亚洲尤码不卡av麻豆| 国产欧美日韩亚洲一区二区三区 | 国产一码二码三码区别| 99精品人妻少妇一区| 欧美老熟妇又粗又大| 亚洲国产精品一区二区三| 国产超碰无码最新上传| 欧美午夜小视频| 国产精品一区二区三区四区| 99热这里只有精品免费播放| 国产精品综合av一区二区| 国产性色的免费视频网站| 又大又长粗又爽又黄少妇毛片|