日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象初识

發布時間:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象初识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、面向對象(OOP)基本概念

    面向對象編程?——?Object Oriented Programming?簡寫?OOP

1.1 過程和函數

  • 過程?是早期的一個編程概念

  • 過程?類似于函數,只能執行,但是沒有返回值

  • 函數?不僅能執行,還可以返回結果

?

1.2 面相過程和面相對象基本概念

(1)面相過程?——?怎么做

  • 把完成某一個需求的所有步驟從頭到尾逐步實現

  • 根據開發需求,將某些功能獨立的代碼封裝成一個又一個函數

  • 最后完成的代碼,就是順序地調用?不同的函數

  • 特點

  • 注重步驟與過程,不注重職責分工

  • 如果需求復雜,代碼會變得很復雜

  • 開發復雜項目,沒有固定的套路,開發難度很大!

  • (2)?面向對象?——?誰來做

    相比較函數,面向對象更大封裝,根據職責一個對象中封裝多個方法

  • 在完成某一個需求前,首先確定職責?——?要做的事情(方法)

  • 根據職責確定不同的對象,在對象內部封裝不同的方法(多個)

  • 最后完成的代碼,就是順序地讓?不同的對象調用不同的方法

  • 特點

  • 注重?對象和職責,不同的對象承擔不同的職責

  • 更加適合應對復雜的需求變化,是專門應對復雜項目開發,提供的固定套路

  • 需要在面向過程基礎上,再學習一些面向對象的語法

  • ?

    二、類和對象

    01. 類和對象的概念

    1.1 類

    • 是對一群具有?相同特征或者行為的事物的一個統稱,是抽象的,不能直接使用

      • 特征?被稱為?屬性
      • 行為?被稱為?方法
    • 就相當于制造飛機時的圖紙,是一個模板,是負責創建對象

    1.2 對象

    • 對象由類創建出來的一個具體存在,可以直接使用

    • 哪一個類創建出來的對象,就擁有在哪一個類中定義的:

      • 屬性
      • 方法
    • 對象就相當于用圖紙制造的飛機

    在程序開發中,應該先有類,再有對象

    ?

    02. 類和對象的關系

    • 類是模板對象是根據這個模板創建出來的,應該先有類,再有對象

    • ?只有一個,而?對象?可以有很多個

      • 不同的對象?之間?屬性?可能會各不相同

    • ?中定義了什么?屬性和方法對象?中就有什么屬性和方法,不可能多,也不可能少

    ?

    03. 類的設計

    在使用面相對象開發前,應該首先分析需求,確定一下,程序中需要包含哪些類!

    在程序開發中,要設計一個類,通常需要滿足一下三個要素:

  • 類名?這類事物的名字,滿足大駝峰命名法

  • 屬性?這類事物具有什么樣的特征

  • 方法?這類事物具有什么樣的行為

  • 大駝峰命名法

  • 每一個單詞的首字母大寫

  • 單詞與單詞之間沒有下劃線

  • 3.1 類名的確定

    名詞提煉法分析整個業務流程,出現的名詞,通常就是找到的類

    3.2 屬性和方法的確定

    • 對?對象的特征描述,通常可以定義成?屬性

    • 對象具有的行為(動詞),通常可以定義成?方法

    實例:

    • 小明?今年?18 歲身高 1.65,每天早上??完步,會去??東西

    • 小強?今年?16 歲身高 1.60,小強不跑步,小強喜歡??東西

    ?

    三、面相對象基礎語法

    01.?dir?內置函數

    在Python中對象幾乎是無所不在的,我們之前學習的變量、數據、函數都是對象;

    使用內置函數?dir傳入標識符?/?數據,可以查看對象內的所有屬性及方法;

    ?

    提示:?__方法名__?格式的方法是?Python?提供的?內置方法 / 屬性

    序號方法名類型作用
    01__new__方法創建對象時,會被?自動?調用
    02__init__方法對象被初始化時,會被?自動?調用
    03__del__方法對象被從內存中銷毀前,會被?自動?調用
    04__str__方法返回對象的描述信息,print?函數輸出使用

    ?

    02. 定義簡單的類(只包含方法)

    ?面向對象是更大的封裝,在一個類中封裝多個方法,這樣通過這個類創建出來的對象,就可以直接調用這些方法了!

    2.1 定義只包含方法的類

    class 類名:def 方法1(self, 參數列表):passdef 方法2(self, 參數列表):pass
    • 方法的定義格式和之前學習過的函數幾乎一樣

    • 區別在于第一個參數必須是self

    注意:類名的命名規則 要符合大駝峰命名法

    2.2 創建對象

    對象變量 = 類名()

    2.3 第一個面向對象程序

    class Dog:"""這是一個狗類"""def eat(self):print("eat....")def run(self):print("run....")dog = Dog()dog.eat()dog.run()

    引用的概念

    在Python中使用類創建對象之后,dog變量中仍然記錄的是對象在內存中的地址

    也就是dog變量引用了新建的狗對象

    使用print輸出對象變量,默認情況下,是能夠輸出這個變量引用的對象是由哪一個類創建的對象,以及在內存中的地址(十六進制表示)

    提示:在計算機中,通常使用十六進制表示內存地址

    • 十進制?和?十六進制?都是用來表達數字的,只是表示的方式不一樣

    • 十進制?和?十六進制?的數字之間可以來回轉換

    • %d?可以以?10 進制?輸出數字

    • %x?可以以?16 進制?輸出數字

    ?

    03. 方法中的?self?參數

    3.1給對象增加屬性

    在python中,要給對象設置屬性,非常的容易,但是不推薦使用,因為:對象屬性的封裝應該封裝在類的內部

    只需要在類的外部的代碼中直接通過 . 設置一個屬性即可;

    dog.name = "薩摩"

    3.2 使用?self?在方法內部輸出狗的名字

    哪一個對象調用的方法,方法內的 self? 就是哪一個對象的引用。

    • 在類封裝的方法內部,self?就表示?當前調用方法的對象自己

    • 調用方法時,程序員不需要傳遞?self?參數

    • 在方法內部

      • 可以通過?self.?訪問對象的屬性

      • 也可以通過?self.?調用其他的對象方法

    • 在?類的外部,通過?變量名.?訪問對象的?屬性和方法

    • 在?類封裝的方法中,通過?self.?訪問對象的?屬性和方法

    class Dog:"""這是一個狗類"""def eat(self):print("%s 正在 eat.... " %self.name)def run(self):print("%s 正在 run.... " %self.name)dog = Dog()dog.name = "薩摩"dog.eat()dog.run()

    04. 初始化方法

    4.1 初始化方法

    當使用類名()創建對象時,會?自動?執行以下操作:

  • 為對象在內存中?分配空間?—— 創建對象
  • 為對象的屬性?設置初始值?—— 初始化方法(init)
  • 這個?初始化方法?就是__init__方法,__init__是對象的內置方法

    __init__方法是?專門?用來定義一個類?具有哪些屬性的方法

    4.2 在初始化方法內部定義屬性

    • 在__init__方法內部使用?self.屬性名 = 屬性的初始值就可以定義屬性

    • 定義屬性之后,再使用Dog類創建的對象,都會擁有該屬性

    class Dog:def __init__(self):print("這是初始化方法")# 定義用Dog類創建的狗對象都有一個name屬性self.name = "薩摩"def eat(self):print("%s正在吃"%self.name)# 使用類名()創建對象的時候了,會自動調用初始化方法__init__samo = Dog()samo.eat()

    4.3 改造初始化方法 —— 初始化的同時設置初始值

    在開發中,如果希望在創建對象的同時,就設置對象的屬性,可以對 __init__方法進行改造

    • 把希望設置的屬性值,定義成__init__方法的參數

    • 在方法內部使用?self.屬性 = 形參?接收外部傳遞的參數

    • 在創建對象時,使用?類名(屬性1, 屬性2...)?調用

    class Dog:def __init__(self,name):print("這是初始化方法")self.name = namedef eat(self):print("%s正在吃" % self.name)samo = Dog("薩摩")samo.eat()

    05. 內置方法和屬性

    序號方法名類型作用
    01__del__方法對象被從內存中銷毀前,會被?自動?調用
    02__str__方法返回對象的描述信息,print?函數輸出使用

    5.1?__del__?方法

    • 在python中

      • 當使用類名()創建對象時,為對象分配完空間后,自動調用__init__方法
      • 當一個對象被從內存中銷毀?前,會自動調用__del__方法
    • 應用場景

      • __init__改造初始化方法,可以讓創建對象更加靈活
      • __del__如果希望在對象被銷毀前,再做一些事情,可以考慮一下 __del__方法
    • 生命周期
      • 一個對象從調用類名()創建,生命周期開始
      • 一個對象的__del__方法一旦被調用,生命周期結束
      • 在對象的生命周期內,可以訪問對象屬性,或者讓對象調用方法
    class Dog:def __init__(self,name):self.name = nameprint("%s 來了" % self.name)def __del__(self):print("%s 去了" % self.name)samo = Dog("薩摩") # samo是一個全局變量print(samo.name)del samo # del關鍵字可以刪除一個對象

    5.2?__str__?方法

    • 在python中,使用print輸出對象變量,默認情況下,會輸出這個變量引用的對象是由哪一個類創建的對象,以及在內存中的地址(十六進制表示)

    • 如果在開發中,希望使用print輸出對象變量時,能夠打印自定義的內容,就可以利用 __str__這個內置方法了

    注意? __str__方法必須返回一個字符串

    class Dog:def __init__(self,name):self.name = nameprint("%s 來了" % self.name)def __del__(self):print("%s 去了" % self.name)def __str__(self):return "小狗%s" % self.namesamo = Dog("薩摩")print(samo)

    ?

    四、私有屬性和私有方法

    01. 應用場景及定義方式

    1.1應用場景

    • 在實際開發中,對象?的?某些屬性或方法?可能只希望?在對象的內部被使用,而?不希望在外部被訪問到

    • 私有屬性?就是?對象?不希望公開的?屬性

    • 私有方法?就是?對象?不希望公開的?方法

    1.2定義方式

    • 在?定義屬性或方法時,在?屬性名或者方法名前?增加?兩個下劃線,定義的就是?私有?屬性或方法

    class Person(object):def __init__(self, name):self.name = nameself.__age = '保密'def __secret(self):print('性別保密')xiaohei = Person('xiaohei')print(xiaohei.__age) # 私有屬性外部不能訪問print(xiaohei.__secret()) # 私有方法外部不能訪問

    ?

    02. 偽私有屬性和私有方法

    提示:在日常開發中,不要使用這種方式,訪問對象的私有屬性或私有方法

    python中,并沒有?真正意義?的?私有

    ?

    • 在給?屬性方法?命名時,實際是對?名稱?做了一些特殊處理,使得外界無法訪問到
    • 處理方式:在?名稱?前面加上 _類名 => _類名__名稱
    print(xiaohei._Person__age) # 私有屬性外部不能訪問print(xiaohei._person__secret()) # 私有方法外部不能訪問

    ?

    轉載于:https://www.cnblogs.com/ForT/p/10337359.html

    總結

    以上是生活随笔為你收集整理的面向对象初识的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。