天天看點

學學python(4):面向對象及類,子產品

1.       關于類的一些說明

1.1.__init__是類的構造函數,和其他語言中的構造函數功能是一樣的,python類中還有其他的特殊方法,比如析構函數為__del__,在方法名的前後都有雙下劃線。構造函數的傳回值是None。

1.2.包括構造函數在内的所有方法至少要指定一個參數,該參數代表要調用其方法的類的對象,為self,相當于C#中的this關鍵字,如果有多個參數的話,self為第一個參數。每個方法都通過self參數來通路對象屬性。

下面是一個類定義及建立對象調用的例子:

class Employe:

    """It is a class named Employe"""

    def __init__( self ):

      self.name = ""    

      self.age = 0

    def printInfo(self):

        print "name is %s,age is %s"%(self.name,self.age)

調用如下:

from Employe import Employe

emp1=Employe()#create object of class Employe

print "some info for emp1"

print "name:",emp1.name

print "age:",emp1.age

print "showInfo:",emp1.printInfo()

emp1.name="cary"

emp1.age=27

emp1.printInfo()

結果如下:

some info for emp1

name:

age: 0

showInfo: name is ,age is 0

None

name is cary,age is 27

1.3. 類和類的對象都有一些特殊屬性是python為我們建立好的。包括如下:

print Employe.__bases__

print Employe.__dict__

print Employe.__doc__

print Employe.__module__

print Employe.__name__

print emp1.__class__

print emp1.__dict__

print emp1.__module__

print emp1.__doc__

1.4. 文檔字元串是一種說明資訊,可以對類和函數使用,但必須放在類,函數定義緊挨着的下一行,可以使用print Employe.__doc__來顯示文檔字元串。

1.5. 私有屬性:python在遇到雙下劃線開頭的屬性時會進行名字調整,例:

class Test:

    def __init__(self):

        self.public=""

        self.__private=""

test1=Test()

print "public:",test1.public

#print "private:",test1.__private

print "private:",test1._Test__private

上面程式中我們直接通路test1對象的__private時python會提示該屬性不存在,這是因為python對其進行了重命名,命名後為Test__private,我們通路這個名字就可以通路到該屬性。

2.       自定義字元串表示:__str__方法,該方法必須傳回字元串,下面是例子:

    def __str__(self):

        return "name is %s,age is %s"%(self.name,self.age)

emp1.age=29

print emp1   

當我們print 類的執行個體的時候,會調用對象的__str__方法

3.       運算符重載:在使用python中運算符的時候都會調用一個python内部的特殊方法,比如使用減号(-)運算符的時候會調用__sub__特殊方法,是以重載減号運算符就變成了重寫__sub__方法。其他運算符和特殊方法的對應可以查閱相關文檔得到。下面是一個重載加法運算符的簡單例子,如下:

class NumTest:

    def __init__(self,num1):

        self.data=num1

    def __add__(self,num2):

        return self.data+num2

num=NumTest(9)

result=num + 6

print result

4. 子產品是邏輯上組織代碼的方法,檔案是實體上組織子產品的方法,是以一個檔案被看做是一個獨立子產品,一個子產品也可以看做是一個檔案。

5.警告架構:包括一些警告異常類的集合,Warning直接從Exception繼承,作為所有警告的基類,有UserWarning,DeprecationWarning,SyntaxWarning,RuntimeWarning.

6.子產品内建函數

__import__():作為實際上導入子產品的函數,即import語句調用__import__函數完成它的工作,如果有必要時我們可以自定義該函數。

golbals()和locals():分别傳回調用者全局和局部名稱空間的字典,在一個函數内部局部名稱空間代表在函數執行時候定義的所有名字,locals函數傳回就是包含這些名字的字典,globals傳回函數可以通路的全局名字的字典。

reload():可以重新導入一個已經導入的子產品。

7.包:有層次的檔案目錄結構。