python基礎:__init__.py和__init__函數的作用


一、__init__.py文件

原來在python模塊的每一個包中,都有一個__init__.py文件(這個文件定義了包的屬性和方法)然后是一些模塊文件和子目錄,假如子目錄中也有 __init__.py 那么它就是這個包的子包了。當你將一個包作為模塊導入(比如從 xml 導入 dom )的時候,實際上導入了它的 __init__.py 文件。

一個包是一個帶有特殊文件 __init__.py 的目錄。__init__.py 文件定義了包的屬性和方法。其實它可以什么也不定義;可以只是一個空文件,但是必須存在。如果 __init__.py 不存在,這個目錄就僅僅是一個目錄,而不是一個包,它就不能被導入或者包含其它的模塊和嵌套包。

在python中, module(也即python的模塊)是一個單獨的文件來實現的,要吧是py文件,或者pyc文件,甚至是C擴展的dll文件。而對於package, Python使用了文件夾來實現它,可以說,一個文件夾就是一個package,里面容納了一些py、pyc或dll文件,這種方式就是把module聚合成一個package的具體實現

發現在引入package的過程中,init.py會運行,因此,如果某些變量或方法需要常駐內存,可以將它們寫入init.py文件中。

__init__.py 中還有一個重要的變量,叫做 __all__。我們有時會使出一招“全部導入”,也就是這樣:

from PackageName import *

這時 import 就會把注冊在包 __init__.py 文件中 __all__ 列表中的子模塊和子包導入到當前作用域中來。比如:

#文件 __init__.py
__all__ = ["Module1", "Module2", "subPackage1", "subPackage2"]

 

二、__init__函數

父類A

1 class A(object):
2     def __init__(self, name):
3         self.name=name
4         print "name:", self.name
5     def getName(self):
6         return 'A ' + self.name
View Code
  1. 子類不重寫__init__,實例化子類時,會自動調用父類定義的__init__

子類B繼承父類A

1 class B(A):
2     def getName(self):
3         return 'B '+self.name
4  
5 if __name__=='__main__':
6     b=B('hello')
7     print b.getName()
View Code

輸入結果為:

name: hello
B hello

     2.子類重寫了__init__時,實例化子類,就不會調用父類已經定義的__init__方法

     3.子類為了能使用或擴展父類的行為,最好顯示調用父類的__init__方法

 class 子類:

     def __init__(self,參數) :

            super(子類,self).__init__(參數)  #執行父類的__init__方法

 1 class A(object):
 2     def __init__(self, name):
 3         self.name=name
 4         print "name:", self.name
 5     def getName(self):
 6         return 'A ' + self.name
 7 
 8 class B(A):
 9     def __init__(self, name):
10         super(B, self).__init__(name)
11         print "hi"
12         self.name =  name
13     def getName(self):
14         return 'B '+self.name
15 
16 if __name__=='__main__':
17     b=B('hello')
18     print b.getName()
View Code

輸出結果:

name: hello
hi
B hello




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM