<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 問題 你想將一個模塊分割成多個文件。但是你不想將分離的文件統一成一個邏輯模塊時使已有的代碼遭到破壞。 ## 解決方案 程序模塊可以通過變成包來分割成多個獨立的文件。考慮下下面簡單的模塊: ~~~ # mymodule.py class A: def spam(self): print('A.spam') class B(A): def bar(self): print('B.bar') ~~~ 假設你想mymodule.py分為兩個文件,每個定義的一個類。要做到這一點,首先用mymodule目錄來替換文件mymodule.py。 這這個目錄下,創建以下文件: ~~~ mymodule/ __init__.py a.py b.py ~~~ 在a.py文件中插入以下代碼: ~~~ # a.py class A: def spam(self): print('A.spam') ~~~ 在b.py文件中插入以下代碼: ~~~ # b.py from .a import A class B(A): def bar(self): print('B.bar') ~~~ 最后,在 __init__.py 中,將2個文件粘合在一起: ~~~ # __init__.py from .a import A from .b import B ~~~ 如果按照這些步驟,所產生的包MyModule將作為一個單一的邏輯模塊: ~~~ >>> import mymodule >>> a = mymodule.A() >>> a.spam() A.spam >>> b = mymodule.B() >>> b.bar() B.bar >>> ~~~ ## 討論 在這個章節中的主要問題是一個設計問題,不管你是否希望用戶使用很多小模塊或只是一個模塊。舉個例子,在一個大型的代碼庫中,你可以將這一切都分割成獨立的文件,讓用戶使用大量的import語句,就像這樣: ~~~ from mymodule.a import A from mymodule.b import B ... ~~~ 這樣能工作,但這讓用戶承受更多的負擔,用戶要知道不同的部分位于何處。通常情況下,將這些統一起來,使用一條import將更加容易,就像這樣: ~~~ from mymodule import A, B ~~~ 對后者而言,讓mymodule成為一個大的源文件是最常見的。但是,這一章節展示了如何合并多個文件合并成一個單一的邏輯命名空間。 這樣做的關鍵是創建一個包目錄,使用 __init__.py 文件來將每部分粘合在一起。 當一個模塊被分割,你需要特別注意交叉引用的文件名。舉個例子,在這一章節中,B類需要訪問A類作為基類。用包的相對導入 from .a import A 來獲取。 整個章節都使用包的相對導入來避免將頂層模塊名硬編碼到源代碼中。這使得重命名模塊或者將它移動到別的位置更容易。(見10.3小節) 作為這一章節的延伸,將介紹延遲導入。如圖所示,__init__.py文件一次導入所有必需的組件的。但是對于一個很大的模塊,可能你只想組件在需要時被加載。 要做到這一點,__init__.py有細微的變化: ~~~ # __init__.py def A(): from .a import A return A() def B(): from .b import B return B() ~~~ 在這個版本中,類A和類B被替換為在第一次訪問時加載所需的類的函數。對于用戶,這看起來不會有太大的不同。 例如: ~~~ >>> import mymodule >>> a = mymodule.A() >>> a.spam() A.spam >>> ~~~ 延遲加載的主要缺點是繼承和類型檢查可能會中斷。你可能會稍微改變你的代碼,例如: ~~~ if isinstance(x, mymodule.A): # Error ... if isinstance(x, mymodule.a.A): # Ok ... ~~~ 延遲加載的真實例子, 見標準庫 multiprocessing/__init__.py 的源碼.
                  <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>

                              哎呀哎呀视频在线观看