python 類和實例

class 定義以下:
class ClassName(ParentClass):
    """class  docstring"""
    def   method(self):
        return
在python 中 定義類是經過class關鍵字,class後面接類名,類名一般是大寫開頭的單詞
括號中的ParentClass用來表示繼承的父類,若是沒有合適的繼承類,就是用object類,這是全部的類最終都會繼承的類
""""""中的內容表示docstring,能夠省省略
定義方法與函數定義十分相似,不過多了一個self參數表示這個對象自己
class  Student(object):
    pass

 定義好了student類,就能夠根據Student類建立出Student的實例,建立實例經過類名+'()'實現的:python

bart=Student()
print  bart
# <__main__.Student object at 0x02497B90>
print  Student
# <class '__main__.Student'>

 能夠看到變量bart指向的就是一個Student的object,後面的0x02497B90是內存地址
 能夠自由的給一個實例變量綁定屬性
編程

bart.name='Bart Simpson'
print  bart.name     #  ==>>Bart Simpson

 因爲類能夠起到模板的做用,所以在建立實例的時候,把一些咱們認爲必須綁定的屬性強制填寫進去
 經過定義一個特殊的__init__方法,在建立實例的時候就把name,score等屬性綁定上去:
函數

class   Student(object):
    def   __init__(self,name,score):
        self.name=name
        self.score=score

   __init__方法的第一個參數永遠是self,表示建立的實例自己,所以,在__init__方法內部就能夠把各類屬性綁定到self,由於self就指向建立的實例自己。
有了__init__方法,在建立實例的時候,就不能傳入空的參數了,必須傳入與__init__方法匹配的參數,但self不須要傳,python解釋器本身會把實例變量傳進去:
spa

bart=Student('Bart Simpson',59)
print bart.name    #==>Bart Simpson
print  bart.score   #==>59

 和普通的函數相比,在類中定義的函數只有一點不一樣,就是第一個參數永遠是實例變量self,而且調用時不用傳遞該參數,除此以外,類的方法和普通函數沒有什麼區別code

 數據封裝
對象

面向對象編程的一個重要的特別就是數據封裝。在上面的student類中,每一個實例就擁有各自的name和score這些數據。咱們能夠經過函數來訪問這些數據
def   print_score(std):
    print  '%s:%s' %(std.name,std.score)

print_score(bart)
# Bart Simpson:59
可是既然student實例自己就擁有這些數據,要訪問這些數據,就沒有必要從外面的函數去訪問,能夠直接在student類的內部定義訪問數據的函數,
這樣就把數據給封裝起來了,這些封裝數據的函數是和student類自己關聯起來的,咱們稱之爲類的方法
class   Student(object):
    def   __init__(self,name,score):
        self.name=name
        self.score=score

    def  print_score(self):
        print  '%s:%s' %(self.name,self.score)
要定義一個方法,除了第一個參數是self外,其餘和普通函數同樣。要調用一個方法只須要在實例變量上直接調用,除了self不用傳遞,其餘參數正常傳入: 
bart.print_score()
# Bart Simpson: 59

 這樣一來,咱們從外部看Student類,就只須要知道,建立實例須要給出name和score,而如何打印,
都是在Student類的內部定義的,這些數據和邏輯被「封裝」起來了,調用很容易,但卻不用知道內部實現的細節。blog

封裝的另外一個好處是能夠給Student類增長新的方法,好比get_grade:
繼承

class Student(object):
    ...

    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
相關文章
相關標籤/搜索