<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 7.2.2 對象的創建 一旦定義了類,就可以創建類的實例,也就是該類的一個對象②。類是抽象的,而對象 則是具體的,就好比“人”是抽象概念,而“張三”是個具體的人。一個類可以創建任意多 個實例(對象),所有實例都具有相同的行為(這是由類中定義的方法決定的),但各自的數 據值可以不同。創建類的實例采用如下形式: ``` <變量> = <類名>(<參數>) ``` 這里將類名當成一個函數來用,稱為類的構造器(constructor,或稱構造函數)。構造器返回 一個新對象,通常需要定義&lt;變量&gt;來引用這個新對象。注意,雖然&lt;變量&gt;只是對新對象的引 用,但習慣上我們也常說&lt;變量&gt;就是新對象本身,這一般不會產生混淆。 如果希望創建對象時將對象定制成特定的初始狀態,則可以在類中定義特殊的 \_\_init\_\_ 方法③。創建新對象時,Python 自動調用 \_\_init\_\_,實現對新對象的初始化,比如為該對象所 擁有的數據進行賦值。 \_\_init\_\_ 方法可以用參數(至少有一個 self 參數)來傳遞初始化所需的信息,調用 \_\_init\_\_ 時必須提供相應的實參。但由于 \_\_init\_\_ 不是直接調用的,無法直接將實 參傳遞給它,所以我們將所需實參傳遞給構造器,再由構造器自動傳遞給 \_\_init\_\_ 。不過,\_\_init\_\_ 的特殊參數 self 是一個例外,傳遞給 self 的實參是新創建的對象(更準確地說是對新 建對象的引用)。 > ① 如 Pascal 語言中的 record 和 C 語言中的 struct 類型。 > ② 本書中混用“實例”和“對象”這兩個術語,視之為相同的概念。 > ③ 也可以說 init ()才是類的構造器,不過不能直接調用,而是通過類名來隱含地調用。 例如,下面的語句先導入 Person 類,然后創建一個 Person 對象,并使變量 p1 引用該對象: ``` >>> from person import Person >>> p1 = Person("Lucy",2005) ``` 創建對象時自動調用 init__方法,該方法所需的三個參數 self、n、y 分別用實參 p1、"Lucy"和 2005 代入,這相當于函數調用 ``` __init__ (p1,"Lucy",2005) ``` 從而導致執行 \_\_init\_\_的函數體,為新對象進行初始化: ``` p1.name = "Lucy" p1.year = 2005 ``` 圖 7.6 給出了上述利用 Person 構造器創建對象 p1 并調用 \_\_init\_\_進行初始化的過程。 ![](https://box.kancloud.cn/2016-02-22_56cafce3f204c.png) 圖 7.6 對象創建與初始化 注意, init 方法中對變量 name 和 year 所賦的值"Lucy"和 2005,是專屬于新實例 p1 的,它們與同一個類的其他實例(例如下面將創建的 p2)沒有關系。這兩個變量都屬于實例 變量(instance variable),意即它們的值是隨實例的不同而不同的。下面再創建一個 Person 對象,并使變量 p2 引用這個新對象: ``` >>> p2 = Person("Tom",1990) ``` 同樣地,Python 自動調用 init 方法,只不過這次傳遞給該方法的參數是 p2、"Tom"和 1990, 即相當于函數調用 ``` __init__ (p2,"Tom",1990) ``` 從而導致執行 \_\_init\_\_的函數體,為新對象 p2 進行初始化: ``` p2.name = "Tom" p2.year = 1990 ``` 這里,對實例變量 name 和 year 所賦的值"Tom"和 1990 是專屬于新實例 p2 的,與前面創建的實例 p1 沒有關系。創建同一個類的多個實例的過程可參見圖 7.7。 ![](https://box.kancloud.cn/2016-02-22_56cafce40ec05.png) 圖 7.7 創建同一個類的多個實例 從圖 7.7 可見,類與實例的關系就像模具與產品的關系,用同一個模具可以制造出大量 的產品,這些產品總體上是相似的,但可能各有不同的細節。p1 與 p2 是屬于同一類的對象, 總體上非常相似,例如都有數據 name 和 year,但各有不同的數據值。
                  <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>

                              哎呀哎呀视频在线观看