python的面向對象-封裝、繼承和多態


python是一種面向對象的編程語言。面對對象的編程語言有三個重要的特性,即封裝、繼承和多態。下面分別進行介紹。

封裝

封裝,就是把事物封裝成抽象的類,其屬性和方法只讓可信的類或者對象操作。因此,封裝,在一定意義上就是類。比如現在有好幾個鳥兒,爲了更好的管理這些鳥兒,我們把他們抽象成一個類,然後實例化對象來管理他們。python中類的創建和使用範例如下代碼:

class Brid():
    def __init__(self,name,weight,fly_height):#初始化
        self.name=name
        self.weight=weight
        self.fly_height=fly_height
    def fly(self):                           #方法
        print("my name is ", self.name)
        print("I can fly ", self.fly_height)

Jim=Brid('jim',10,100)   #創建一個對象
Alice=Brid('Alice',8,80)

Jim.fly()                 #對象調用類的方法
Alice.fly()

運行結果如下:

my name is  jim
I can fly  100
my name is  Alice
I can fly  80

繼承

繼承是基於類的。繼承,指可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按級分類的概念。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴展。 通過繼承創建的新類稱爲“子類”或“派生類”,被繼承的類稱爲“基類”、“父類”或“超類”。繼承的過程,就是從一般到特殊的過程。通俗的來講,繼承是小類和大類的關係。最典型的例子是生物學裏的分門別類,如界、門、綱、目、科、屬、種。例如哺乳綱下有貓科、犬科等。這裏貓科和犬科繼承了哺乳綱的屬性和方法。貓、犬科是子類,哺乳綱是父類。還有個例子是我們可以分男人女人,老師學生等,都可以從人這個父類繼承。
一個類的繼承例子如下:

class Person():
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def whoAmI(self):
        print('I am a Person, my name is', self.name)


class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score

    def whoAmI(self):
        print('I am a Person, my name is', self.name)
    def playGame(self):
        print("I like playing game ")


class Teacher(Person):
    def __init__(self, name, gender, course):
        super(Teacher, self).__init__(name, gender)
        self.course = course
    def teaching(self):
        print("I like teaching students ")

多態

多態是基於繼承的。是指一個類實例的相同方法在不同情形有不同表現形式。多態機制使具有不同內部結構的對象可以共享相同的外部接口。當子類對象在調用類的方法時,當子類沒有定義該方法,則朝父類去尋找該方法的實現。針對上面的類的繼承,我們有p,s,t三個對象如下

p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')

p.whoAmI()
s.whoAmI()
t.whoAmI()

輸出結果如下:

I am a Person, my name is Tim
I am a Student, my name is Bob
I am a Person, my name is Alice

我們可以看到,同樣的是調用whoAmI方法,三個對象的結果不同,是一種多態的表現。另外值得注意的是,Teacher的對象t沒有在子類中實例化whoAmI方法,但是他追溯,向上父類找到該方法的實現。這也是多態的一種表現。

總結

面向對象的編程語言是基於類實現的,而類有繼承,繼承有催生了多態。因此這是一脈相承的,只有深刻理解了封裝、繼承和多態,才能理解面向對象編程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章