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方法,但是他追溯,向上父類找到該方法的實現。這也是多態的一種表現。
總結
面向對象的編程語言是基於類實現的,而類有繼承,繼承有催生了多態。因此這是一脈相承的,只有深刻理解了封裝、繼承和多態,才能理解面向對象編程。