<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 多態 多態指的是一類事物有多種形態,比如 動物有多種形態:人,狗,豬 ~~~ import abc class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self): pass class People(Animal): #動物的形態之一:人 def talk(self): print('say hello') class Dog(Animal): #動物的形態之二:狗 def talk(self): print('say wangwang') ~~~ ## 多態性 ### **什么是多態動態綁定(多態性)** 多態性是指在不考慮實例類型的情況下使用實例,多態性分為靜態多態性和動態多態性 * 靜態多態性:如任何類型都可以用運算符+進行運算 * 動態多態性:如下 ~~~ peo=People() dog=Dog() pig=Pig() #peo、dog、pig都是動物,只要是動物肯定有talk方法 #于是我們可以不用考慮它們三者的具體是什么類型,而直接使用 peo.talk() dog.talk() pig.talk() #更進一步,我們可以定義一個統一的接口來使用 def func(obj): obj.talk() ~~~ ### **為什么要用多態性** 從上面多態性的例子可以看出,python本身就是支持多態性的,這么做的好處是什么呢? 1. 增加了程序的靈活性 以不變應萬變,不論對象千變萬化,使用者都是同一種形式去調用,如func(animal) 2. 增加了程序額可擴展性 通過繼承animal類創建了一個新的類,使用者無需更改自己的代碼,還是用func(animal)去調用 ~~~ >>> class Cat(Animal): #屬于動物的另外一種形態:貓 ... def talk(self): ... print('say miao') >>> def func(animal): #對于使用者來說,自己的代碼根本無需改動 ... animal.talk() >>> cat1=Cat() #實例出一只貓 >>> func(cat1) #甚至連調用方式也無需改變,就能調用貓的talk功能 say miao ~~~ >新增了一個形態Cat,由Cat類產生的實例cat1,使用者可以在完全不需要修改自己代碼的情況下。使用和人、狗、豬一樣的方式調用cat1的talk方法,即func(cat1) ## 鴨子類型 Python崇尚鴨子類型,即‘如果看起來像、叫聲像而且走起路來像鴨子,那么它就是鴨子’ python程序員通常根據這種行為來編寫程序。例如,如果想編寫現有對象的自定義版本,可以繼承該對象,也可以創建一個外觀和行為像,但與它無任何關系的全新對象,后者通常用于保存程序組件的松耦合度。 * 例1: 利用標準庫中定義的各種‘與文件類似’的對象,盡管這些對象的工作方式像文件,但他們沒有繼承內置文件對象的方法 ~~~ #二者都像鴨子,二者看起來都像文件,因而就可以當文件一樣去用 class TxtFile: def read(self): pass def write(self): pass class DiskFile: def read(self): pass def write(self): pass ~~~ * 例2:序列類型有多種形態:字符串,列表,元組,但他們直接沒有直接的繼承關系 ~~~ #str,list,tuple都是序列類型 s=str('hello') l=list([1,2,3]) t=tuple((4,5,6)) #我們可以在不考慮三者類型的前提下使用s,l,t的len方法 s.__len__() l.__len__() t.__len__() ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看