python - 面向對象編程


面向對象編程(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)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM