知識點好吧:Python的面向物件程式設計學習
Python的可用性及優勢相信懂的都知道,在這裡我就不過多贅述了,總之一句話人生苦短,我用Python。
基本概念理解
面向物件程式設計——Object Oriented Programming,簡稱OOP,是一種程式設計思想。OOP把物件作為程式的基本單元,一個物件包含了資料和操作資料的函式。
面向過程的程式設計把計算機程式視為一系列的命令集合,即一組函式的順序執行。為了簡化程式設計,面向過程把函式繼續切分為子函式,即把大塊函式通過切割成小塊函式來降低系統的複雜度。
而面向物件的程式設計把計算機程式視為一組物件的集合,而每個物件都可以接收其他物件發過來的訊息,並處理這些訊息,計算機程式的執行就是一系列訊息在各個物件之間傳遞。
面向物件的設計思想是抽象出Class,根據Class建立Instance
類與例項
Python資料學習Q群 519970686 #物件 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)); def get_grade(self): if self.score >= 90: return 'A'; elif self.score >= 60: return 'B'; else: return 'C'; bart = Student("yehui", 99); lisa = Student("yehui01", 55); bart.print_score(); lisa.print_score(); print(lisa.get_grade()); # 注意到__init__方法的第一個引數永遠是self, # 表示建立的例項本身,因此,在__init__方法內部, # 就可以把各種屬性繫結到self,因為self就指向建立的例項本身。
訪問限制
如果我們不想讓物件的例項的屬性值被外部程式碼修改的話,我們就可以把屬性的名稱前面加上兩個下劃線__,例項的變數名如果以下劃線 開頭,那麼他就是一個私有變數。
繼承與多型
在面向物件程式設計的語言中,繼承是其主要的特性之一(封裝、多型、繼承),在python中,他的面向物件程式設計的繼承和c++等面嚮物件語言相類似,就是子類可以繼父類的屬性和方法,通過繼承,子類獲得了父類的全部功能。我就不總結了,下面是他的繼承方式及格式:
#繼承 class Animal(object): def run(self): print("Animal is running..."); class Dog(Animal): def run(self): print("Dog is running..."); class Cat(Animal): def eat(self): print("Cat is meating..."); class Pig(Animal): pass; dog = Dog(); dog.run(); cat = Cat(); cat.run(); cat.eat(); pig = Pig(); pig.run(); # Dog is running... # Animal is running... # Cat is meating... # Animal is running...
你可以自己在給繼承父類的子類新增方法和屬性,也可也不新增。也可以重寫父類的方法,這樣子類的方法將會覆蓋掉父類的方法。這就是繼承的一個好處:多型。
#多型
def run_twice(animal):
animal.run();
animal.run();
run_twice(Animal());
run_twice(Dog());
# Animal is running...
# Animal is running...
# Dog is running...
# Dog is running...
python多型允許我們新增父類的子類。對修改封閉:不需要修改依賴Animal型別的run_twice()等函式。
Python是動態語言來說,則不一定需要傳入Animal型別。我們只需要保證傳入的物件有一個run()方法就可以了
獲取物件資訊
通過python內建的一系列函式,我們可以對任意一個物件進行剖析
使用 type()函式判斷物件的型別;
使用isinstance()來判斷類class的繼承型別;
使用dir()函式獲取一個物件的所以屬性和方法。
總結
python的面向物件程式設計的思想和其他的面向物件程式語言大同小異,只不過是寫法和用法的有差異而已,我因為之前有學過c++,所以在這部分的學習也算比較瞭解。所以有想學Python的朋友可以加一下這個企(Q)鵝群519970686,裡面能找到一些你需要的資料,幫你解答一些問題。