阿里達摩院聯合友盟+ ,推出國內首個智慧推送
1.面向物件
面向物件就是一種程式設計思想
面向過程也是一種程式設計思想 # 核心就是過程
# 過程就是'流水線',用來分步驟解決問題的
# 過程的核心思想就是將程式流程化進而簡單化
面向物件 # 核心是物件二字
物件:物件就是容器,容器是用來盛放東西的(盛放什麼東西)
用來盛放資料與功能的。
---所以說物件就是'資料'跟'功能'的集合體
---物件就是將程式'整合'
程式=資料+功能
學習物件就是將資料與功能整合到一起的方法
函式是放功能的容器
面向物件是一種更好的實現資料和功能整合到一起的方法
類:就是將物件做一個個區分,為了解決物件重複存取的問題
所以說類也是一種容器,該容器用來存放同類物件共有的資料與功能。
也可以將類叫做物件。
我們在訪問資料的時候是先從物件裡面的空間裡面找,然後在從類的空間裡面找
----------------類的語法:----------------
1.先定義類
class 定義類, 類中可以有任何的程式碼
1.變數的定義,2.功能的定義
類體程式碼在定義時候就運行了,就會產生名稱空間。
這個時候對比一下(函式會在呼叫的時候才產生名稱空間,而類在定義階段就產生名稱空間)
print(Student.__dict__) # 可以檢視類的名稱空間裡面的名字
類中存放的是物件共有的東西,本質是給物件用的,類自己也可以用
print(Student.__dict__['sss']) # 可以取出類裡面的值
python給我們提供了一種專門的取值方法
屬性訪問語法,這個sss不能稱為是字串,而是Student這個類的一個屬性
類的屬性無非就兩種(1.訪問資料屬性,2.訪問函式屬性)
print(Student.sss) # 本質就跟上面的取值一樣,但是簡便了很多
類跟物件是有關聯的
2.在呼叫類產生物件
類跟物件是有關聯的,如果想讓物件跟類有關聯,必須用剛剛造出來的類呼叫一 下。 需要強調的是這個呼叫不會執行程式碼,因為類在定義的時候就執行程式碼過 了。只要呼叫Student()就會幫你產生一個物件,就會建立類和這個物件的關聯 此時這個物件還是空的物件。需要你往裡面新增。然後可以得到他的返回值,這個返回值就是物件。物件放的也是資料跟功能
所以物件在剛剛造出來的時候,應該為他初始化定製他獨有的屬性(資料初始化)
最好是不用自己產生,在呼叫的時候會自動把物件初始化
所以把下面的函式也放進類裡面。只要呼叫類,就會把空物件傳給__init__這個函式,呼叫的時候後三個引數需要自己來傳
def __init__(obj,引數1,引數2,引數3.....):
obj.stu_name = 引數1
obj.stu_age = 引數2
obj.stu_gender = 引數3
在類定義階段不會觸發,在呼叫階段自動觸發
Stu1_obj = Student(引數1,引數2,引數3)
呼叫類的過程又稱為例項化(你屬於人類,但是不能說人類是你,你只是人類實際存在的一個案例,這就叫例項)
呼叫類是為了產生物件的,這個過程有人稱之為例項化,將類這個抽象的東西,例項化
-----------------呼叫類發生了三件事------------
1.先產生一個空物件
2.會呼叫類中的__init__方法,然後將空物件以及呼叫類時括號內傳入的引數一同傳給__init__方法
3.返回初始化完的物件,然後可以做一個賦值操作可以看到物件裡面的結果
------------總結__init__方法------------
1.會在呼叫類時自動觸發執行,用來為物件初始化自己獨有的資料
2.__init__內應該存放的是為物件初始化屬性的功能,當然你也可以存放任意你想寫的程式碼,想要在類呼叫時就立即執行的程式碼都可以放到該方法內
3.呼叫類的返回值並不是__init__, __init__方法必須返回None,不能返回非None的值
-------------------一個完整的類的形式----------
class Student:
# 1.變數的定義
stu_school='oldboy'
# 空物件
def __init__(obj,x,y,z):
obj.stu_name=x
obj.stu_age=y
obj.stu_gender=z
# 功能的定義
def tell_stu_info(stu_obj):
print('學生資訊:名字%s 年齡%s 性別%s' % (
stu_obj['stu_name'],
stu_obj['stu_age'],
stu_obj['stu_gender']))
def set_info(stu_obj,x,y,z):
stu_obj['stu_name']=x
stu_obj['stu_age']=y
stu_obj['stu_gender']=z
stu1_obj = Student('egon',18,'male')
3.屬性查詢的順序
類中存放是與物件共有的資料與功能
1.類可以訪問:訪問的是類的資料屬性或者是類的函式屬性
2.其實類中的東西是給物件用的:類的資料屬性是共享給所有物件用的,大家訪問的地址都一樣
類的函式屬性是繫結給物件用的,不同的物件
繫結方法的特殊之處,誰來呼叫誰當做第一個引數傳入該函式內
三大思想
1.程式設計正規化/思想:
面向過程程式設計:
核心是過程二字
優點:過程的終極奧義是將程式流程化,進而簡單化
缺點:可擴充套件性差
面向物件程式設計:
核心是物件二字,物件就是容器,用來盛放資料與功能
物件就是將程式進行高度整合
優點:提升程式的解耦合程度,進而增強程式的可擴充套件性強
缺點:設計複雜
函數語言程式設計:lambda等,python很少用