Python面向對象編程(1)類和實例
Python面向對象編程(1)類和實例【轉載】
面向過程和面向對象編程
面向過程(Procedure Oriented Programming,POP)和 面向對象編程(Object Oriented Programming,OOP) 是兩種主要的程序設計思想。這裏簡單通俗地講一下兩者的區別:
編程的目的:為了去解決一個問題,或者處理一件事情,比如編寫一個程序自動處理學生的信息,或者編寫一個程序可以自動做北京烤鴨。
面向過程編程:按順序編寫一系列程序集合,然後執行,得到想要的結果。比如處理學生信息時:先編寫一條代碼獲取學生性別信息,然後再獲取成績信息,最後打印出該學生的姓名及成績,對於每一個學生,把前面的代碼執行一遍就可以打印出相應的信息。
對於做北京烤鴨也是類似,第一步洗鴨子,接著烤鴨子,最後切了吃掉,吃完了還不飽 ,那就再執行一次,再吃一只。按照我們寫好的命令集合順序執行,之後得到想要的結果,這就是面向過程的編程,其註重的是編寫整個處理的流程。當然為了簡化程序設計,面向過程運用函數把整個過程切分為多個子函數降低系統的復雜度,但它依然是面向過程編程。
面向對象編程:面向對象的編程把計算機程序視為一組對象的集合。比如,處理學生信息時,面向對象的編程並不是想著怎麽編寫程序去處理每個學生的信息,而是把所有這些學生當作一個類(Class),同時把處理類的程序也當作類的一部分,即所有的學生構成一個類,類有自己的屬性和方法,比如姓名和成績都是屬性,而打印成績就是方法,而每一個具體的學生只不過是類的一個實例/對象
舉個例子說明具體的區別:
面向過程
std1 = { ‘name‘: ‘Michael‘, ‘score‘: 98 }
std2 = { ‘name‘: ‘Bob‘, ‘score‘: 81 }
# 處理學生信息可以通過函數實現,比如打印學生的成績:
def print_core(std):
print(‘%s : %s‘%(std[‘name‘],std[‘score‘]))
print_core(std1)
print_core(std2)
Michael : 98
Bob : 81
面向對象
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)) amy = Student(‘amy‘,120) jack = Student(‘jack‘,108) amy.print_score() jack.print_score()
amy : 120
jack : 108
類與實例
面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,比如Student類,是一個統稱,泛指所有的學生,而實例是根據類創建出來的一個具體的“對象”,比如張三、李四,每個對象都擁有相同的方法,但各自的數據/屬性可能不同。
以Student類為例,在Python中,定義類是通過class關鍵字:
class Student(object):
pass
class 後面緊接著是類名,即 Student,類名通常是大寫開頭的單詞,通常采用大駝峰命名法,緊接著是(object),表示該類是從哪個類繼承下來的,繼承的概念後面再講,通常,如果沒有合適的繼承類,就使用 object 類,這是所有類最終都會繼承的類。
定義好了 Student 類,就可以根據 Student 類創建出 Student 的實例,創建實例是通過類名+()實現的:
amy = Student()
print(amy)
print(Student)
<__main__.Student object at 0x000001E75252CBE0>
<class ‘__main__.Student‘>
可以看到,變量 amy 指向的就是一個 Student 的實例,後面的 0x000001E75252CBE0 是內存地址,每個object的地址都不一樣,而Student本身則是一個類。
原文鏈接:https://www.toutiao.com/a6576892638585160205/?tt_from=android_share&utm_campaign=client_share×tamp=1531463659&app=news_article&iid=37513798929&utm_medium=toutiao_android
原文作者:今日頭條 - 小AI咨詢
Python面向對象編程(1)類和實例