面向對象編程(Object Orient Programming,簡稱 OOP),是一種編程方式,這種編程方式需要使用"對象"來實現。
對象具有以下特征:
1、世間萬物皆對象
某個具體領域也是由對象組成,
例如:
在學校領域,對象包括 學生、教師、課程、成績等
在銀行領域,對象包括銀行賬戶、工作人員、支票、現金和驗鈔機等
因此,問題領域中的概念和實體都可以被抽象為 對象。
2、每個對象都是唯一的
對象的唯一性來自於真實世界中事物的唯一性,
世界上不存在兩片一模一樣的葉子,因此在軟件系統中對象也具有唯一性,
例如:學生小王、學生小李、小王的成績單以及小李的成績單,這些對象都是唯一的。
3、對象具有屬性和行為
例如:小李,男,38歲,身高159,會唱歌、可單手開保時捷,
小李的屬性是:姓名、性別、身高,行為是:唱歌、單手開保時捷
在比如:手機,品牌華為,價格5999,黑色,能夠拍照、打電話以及看視頻,
手機的屬性包括品牌、價格和顏色,行為包括拍照、打電話和看視頻,
對象的行為包括具有的功能及具體的實現。
4、對象具有狀態
狀態是指某個瞬間對象的各個屬性的取值,
對象的某些行為往往會改變對象自身的狀態,即屬性的取值,
例如:小李體重200斤,經過減肥后,體重變為100斤
5、對象分為 類對象 和 實例對象 兩大類
類對象 是具有相同屬性和行為的實例對象的抽象,
類對象 就是實例對象的模板,實例對象是由類對象創建出來的。
例子:制作月餅,需要 月餅模具 以及 材料
月餅模具 就是 類對象(實例對象的模板)
月餅 就是 實例對象(由類對象創建出來),即 月餅 由 月餅模具 創建出來。
面向對象編程的大體步驟:
1、抽象出類對象
2、抽象出類對象屬性
3、抽象出類對象的行為(方法)
4、根據類對象創建實例對象
5、通過實例對象訪問屬性的方法
定義類對象以及創建實例對象
一、定義類對象
定義類對象的語法格式:
class 類名(object):
屬性和方法
1.類名由一個或多個單詞組成,一般采取駝峰式寫法,每個字母的首字母大寫,其余的小寫,例如: SomeClass
2.(object)表示該類對象繼承來自Python內置的類對象object, Python中所有的類對象都繼承自一個統一的
基類:object
class SomeClass(object):
pass
二、創建實例對象
根據類對象創建實例對象的語法格式:類名([實參])
為了在創建實例對象后對其進行初始化,可以在類對象中定義一個名為 __init__ (以雙下划線開頭和結尾)的特殊方法,
當創建實例對象后就會自動調用特殊方法 __init__。
方法就是定義在類對象中的函數,方法與函數的區別在於:
1、定義方法時,方法的第一個形參表示調用該方法的實例對象,第一形參的名稱通常是 self ,也可以是其他名稱;
2、調用方法時,系統自動將調用該方法的實例對象作為實參傳遞給第一形參,第一實參會傳遞給第二形參,
第二實參會傳給第三形參,依此類推。
# 創建類對象
class SomeClass(object):
pass
# 創建實例對象,類名([實參])
sc = SomeClass()
print(sc)
# <__main__.SomeClass object at 0x000000000282FC48>
# 類對象 SomeClass 存在方十六進制的0x000000000282FC48 內存地址中
# 創建類對象
class SomePeople(object):
def __init__(self, age, sex):
self.age = age
self.sex = sex
# 創建實例對象,類名([實參])
test = SomePeople(18, "男")
print(test)
練習1
class Count():
# 定義加法
def add(self, a, b):
return a + b
# 定義減法
def acc(self, a, b):
return a - b
# 加法和減法相乘
def aee(self, a, b):
# 這里的 self 就是類本身的實例參數
return self.add(a, b) * self.acc(a, b)
if __name__ == '__main__':
# 實例化
t = Count()
# print(t.acc(3, 8))
print(t.aee(7, 8)) # -15
練習2
# 定義類
class ToastBeef():
def __init__(self):
# 被烤的時間
self.cook_time = 0
# 牛肉的初始狀態,生的
self.cook_static = '生的'
# 調料列表,定義為空,代表開始的原味的
self.condiments = []
def cook(self, time):
"""烤牛肉的方法"""
self.cook_time += time
if 0 <= self.cook_time < 4:
self.cook_static = '三分熟'
elif 4 <= self.cook_time < 5:
self.cook_static = '五分熟'
elif 5 <= self.cook_time < 8:
self.cook_static = '7分熟'
elif self.cook_time >= 8:
self.cook_static = '熟透了'
def add_condiments(self, condiment):
"""添加調料"""
self.condiments.append(condiment)
def __str__(self):
# 當使用print輸出對象的時候,默認打印對象的內存地址。如果類定義了__str__方法,
# 那么就會打印從在這個方法中 return 的數據。
return f'牛肉烤了{self.cook_time}分鍾, 狀態是{self.cook_static}, 添加的調料有{self.condiments}'
beef = ToastBeef()
# print(beef)
beef.cook(3)
beef.add_condiments('孜然')
print(beef)
# beef.cook(2)
# beef.add_condiments('胡椒粉')
# print(beef)