python是一門物件導向的程式語言
所謂的物件導向的語言,簡單理解就是語言中的所有操作都是通過物件來進行的。
先看一下面向過程的程式設計的語言
面向過程指將我們的程式的邏輯分解為乙個乙個的步驟,通過對每個步驟的抽象,來完成程式。例如:孩子上學(分7步)
1.媽媽起床
2.媽媽洗漱
3.媽媽做早飯
4.媽媽叫孩子起床
5.孩子要洗漱
6.孩子吃飯
7.孩子揹著書包上學校
面向過程的程式設計思想將乙個功能分解為乙個乙個小的步驟,我們通過完成乙個乙個的小的步驟來完成乙個程式。
優點:這種程式設計方式,符合我們人類的思維,編寫起來相對比較簡單。
缺陷:這種方式編寫**的往往只適用於乙個功能,如果要在實現別的功能,即使功能相差極小,也往往要重新編寫**,所以它可復用性比較低,並且難於維護
物件導向的程式設計語言
- 物件導向的程式語言,關注的是物件,而不關注過程
- 對於物件導向的語言來說,一切都是物件
- 例如上面的例子可以直接寫成:
孩子他媽起床叫孩子上學
物件導向的程式設計思想,將所有的功能統一儲存到對應的物件中
比如,媽媽功能儲存到媽媽的物件中,孩子的功能儲存到孩子物件中
要使用某個功能,直接找到對應的物件即可
缺陷:但是這種方式編寫,不太符合常規的思維,編寫起來稍微麻煩一點
定義乙個簡單的類
使用class關鍵字來定義類,語法和函式很像!
class 類名([父類]):
**塊
使用myclass建立乙個物件
使用類來建立物件,就像呼叫乙個函式一樣
class myclass():
pass
mc = myclass() # mc就是通過myclass建立的物件,mc是myclass的例項
mc_2 = myclass()
mc_3 = myclass()
mc_4 = myclass()
mc ,mc_2, mc_3, mc_4 都是myclass的例項,他們都是一類物件
isinstance()
用來檢查乙個物件是否是乙個類的例項
result = isinstance(mc_2,myclass)
現在我們通過myclass這個類建立的物件都是乙個空物件
也就是物件中實際上什麼都沒有,就相當於是乙個空的盒子
可以向物件中新增變數,物件中的變數稱為屬性
語法:物件.屬性名 = 屬性值
mc_2.name = '豬八戒'
print(mc_2.name)
例子:定義乙個表示人的類
class person :
# 在類的**塊中,我們可以定義變數和函式
# 在類中我們所定義的變數,將會成為所有的例項的公共屬性
# 所有例項都可以訪問這些變數
name = 'swk' # 公共屬性,所有例項都可以訪問
# 在類中也可以定義函式,類中的定義的函式,我們稱為方法
# 這些方法可以通過該類的所有例項來訪問
def say_hello(self) :
# 方法每次被呼叫時,解析器都會自動傳遞第乙個實參
# 第乙個引數,就是呼叫方法的物件本身,
# 如果是p1調的,則第乙個引數就是p1物件
# 如果是p2調的,則第乙個引數就是p2物件
# 一般我們都會將這個引數命名為self
# say_hello()這個方法,可以顯示如下格式的資料:
# 你好!我是 ***
# 在方法中不能直接訪問類中的屬性
print('你好!我是 %s' %self.name)
建立person的例項
p1 = person()
p1.name = '豬八戒'
p1.say_hello() # '你好!我是 豬八戒'
del p1.name # 刪除p2的name屬性
物件的初始化
class person :
# 在類中可以定義一些特殊方法(魔術方法)
# 特殊方法都是以__開頭,__結尾的方法
# 特殊方法不需要我們自己呼叫,不要嘗試去呼叫特殊方法
# 特殊方法將會在特殊的時刻自動呼叫
# 學習特殊方法:
# 1.特殊方法什麼時候呼叫
# 2.特殊方法有什麼作用
# 建立物件的流程
# p1 = person()的執行流程
# 1.建立乙個變數
# 2.在記憶體中建立乙個新物件
# 3.__init__(self)方法執行
# 4.將物件的id賦值給變數
# init會在物件建立以後離開執行
# init可以用來向新建立的物件中初始化屬性
# 呼叫類建立物件時,類後邊的所有引數都會依次傳遞到init()中
def __init__(self,name):
# print(self)
# 通過self向新建的物件中初始化屬性
self.name = name
def say_hello(self):
# 目前來講,對於person類來說name是必須的,並且每乙個物件中的name屬性基本上都是不同
# 而我們現在是將name屬性在定義為物件以後,手動新增到物件中,這種方式很容易出現錯誤
# 我們希望,在建立物件時,必須設定name屬性,如果不設定物件將無法建立
# 並且屬性的建立應該是自動完成的,而不是在建立物件以後手動完成
# p1 = person()
# # 手動向物件新增name屬性
# p1.name = '孫悟空'
# p2 = person()
# p2.name = '豬八戒'
# p3 = person()
# p3.name = '沙和尚'
# p3.say_hello()
p1 = person('孫悟空')
p2 = person('豬八戒')
p3 = person('沙和尚')
p4 = person('唐僧')
# p1.__init__() 不要這麼做
# print(p1.name)
# print(p2.name)
# print(p3.name)
# print(p4.name)
p4.say_hello()
Python物件導向程式設計 一
類和例項 定義乙個student類 object父類 class student object pass 複製 注意 特殊方法 init 前後有兩個下劃線!def init self,name,score self.name name self.score score 複製 def get grad...
Python物件導向程式設計 一
類和例項 定義乙個student類 object父類 class student object pass 複製 注意 特殊方法 init 前後有兩個下劃線!def init self,name,score self.name name self.score score 複製 def get grad...
python的物件導向程式設計(一)
一 類和例項 類是抽象的模板,而通過類可以例項出來物件。1 建立類 class person object pass class 類名 繼承的類的類名 通常情況下 當乙個類沒有要繼承的類的情況下,就繼承 object類,object是所有的類都會繼承的類 2 建立類的物件並且為類的物件繫結屬性 p1...