1. 程式人生 > >自學Python day6--------面向物件程式設計(類和例項)

自學Python day6--------面向物件程式設計(類和例項)

自學Python day6——–面向物件程式設計(類和例項)

1.類和例項
面向物件最重要的概念就是類(Class)和例項(Instance),必須牢記類是抽象的模板,比如Student類,而例項是根據類創建出來的一個個具體的“物件”,每個物件都擁有相同的方法,但各自的資料可能不同。

以Student類為例:

class Student(object):
pass

class之後是類名,通常以大寫字母開頭,之後是object,表示是從哪個類繼承下來的。通常來說,如果沒有合適的類繼承,就用object。
通過Student類,就可以根據Student的類建立屬於它自己的例項了,是通過類名+()實現:
比如:

Jim = Student(填寫這個Student類的屬性)

在建立類的時候我們可以填加一些這個類必要的屬性。可以通過一個特殊的init方法,可以把name,score,num等一些必要的屬性繫結在這個類上如:

class Student(object)
    def __init__(self,name,socre,num):   #  注意__init__前後都有下劃線'__'
        self.name = name
        self.socre = socre
        self.num = num

init的第一個引數永遠是self,通過這樣的方式就可以把這個類的屬性繫結到self上,通過建立的例項self再把必要的屬性賦予這個例項。

所以一旦有了init函式,則必須要有引數傳入才可以,而Python可以自動的用self把例項變數的屬性傳入如:

Jim = Student('Jim','22','123')
Jim.name
>>>'Jim'
Jim.sorce
>>>123

2.資料封裝
即面向物件程式設計的一個重要的特點就是資料封裝。比如通過Student()這個類,我們可以通過這個類的例項去訪問他的資料,而不是通過在外部的函式去訪問,從而實現資料封裝的效果。我們稱這些封裝資料的函式為類方法:

class Student(object)
    def __init__
(self,name,socre,num): self.name = name self.socre = socre self.num = num def print_information(self): print('name:%s' % self.name) print('socre%s' % self.socre) print('num%s' % self.num)

這樣一來,我們從外部看Student類,就只需要知道,建立例項需要給出name和score,而如何列印,都是在Student類的內部定義的,這些資料和邏輯被“封裝”起來了,呼叫很容易,但卻不用知道內部實現的細節。

class Student(object):
    def __init__(self,name,socre,num):
        self.name = name
        self.socre = socre
        self.num = num
    def print_information(self):
        print('name:%s' % self.name)
        print('socre%s' % self.socre)
        print('num%s' % self.num)
    def get_grade(self):
        if self.socre >= 90:
            print('pretty good')
        elif self.socre >= 60 and self.socre < 90:
            print('good')
        else:
            print('bad') 

Jim.get_grade()
>>>bad

小結:
類是建立例項的模板,而例項則是類的物件,它們之間的資料是相互獨立,互不影響的。
方法形式上是普通的函式,但是它是和例項繫結在一起的,可以通過方法直接訪問例項的資料。
通過例項上呼叫類的方法,其實就是直接訪問例項中的資料,但是並不需要知道方法的內部實現。
和靜態語言不同,Python允許對例項變數繫結任何資料,也就是說,對於兩個例項變數,雖然它們都是同一個類的不同例項,但擁有的變數名稱都可能不同:

>>> bart = Student('Bart Simpson', 59)
>>> lisa = Student('Lisa Simpson', 87)
>>> bart.age = 8
>>> bart.age
8
>>> lisa.age
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'age'