pyhton基礎【18】面向對象基礎一

目錄

一.面向對象

二.面向對象概述

三.類與對象


一.面向對象

Python中的面向對象編程OOP是一種編程范式,它使用對象來設計軟件。對象是具有屬性(稱為屬性)和可以執行的操作(稱為方法)的數據結構。

基礎概念

類:class

類是創建對象的藍圖或模板。它為對象提供了初始狀態(屬性)和行為(方法)

對象:Object

對象是類的實例。它由類實例化而成,具體實現了類中定義的行為。

屬性:Attribute

屬性是保存在對象中的數據,代表了對象的狀態。

方法:Method

方法是定義在類中的函數,能夠對對象進行操作或計算。

繼承:Inheritance

繼承是一種機制,它允許一個類繼承另一個類的屬性和方法,從而促進代碼的復用。

封裝:Encapsulation

封裝是將對象的實現細節隱藏起來,只暴露有限的接口供外部訪問。

多態:Polymorphism

多態是對象根據引用類型或繼承的實體展現出不同的形態。

使用場景

1. 建模真實世界的問題:?

  • 當問題可以以物體、實體或者具有明確層次結構的事物表示時,OOP特別有用,比如管理人員、汽車、賬戶等。

2. 軟件設計和架構:?

  • 大型軟件項目通常劃分為多個互相協作的模塊。OOP使得通過定義清晰的類和對象來組織這些模塊成為可能。

3. 游戲開發:

  • 游戲中的角色、道具等都可作為對象來處理,每個對象有其屬性和行為,易于管理和拓展。

4. 用戶界面設計:

  • 用戶界面組件,如按鈕、窗口和菜單項等,很自然地映射為對象,每個對象有其方法進行響應和處理用戶的操作。

5. Web應用開發:?

  • 如Django和Flask,使用OOP實現模型(Model)、視圖(View)、控制器(Controller)(MVC)或模型(Model)、視圖(View)、模板(Template)(MVT)模式。

6. 代碼復用和組織:?

  • 通過創建一個基礎類,其他相關的子類可以繼承并重用代碼,減少冗余,并有助于維護。

面向對象編程提供了一種清晰的方式來組織復雜的代碼結構,使得大型項目的維護和協作變得更為容易。其主要優勢是提高了代碼的可讀性、可擴展性和可維護性。在設計初期,使用OOP進行系統設計能夠幫助開發者更直觀地理解問題,并且更好地進行模塊和功能的劃分。

二.面向對象概述

需求

編寫一個程序,完成一名學生的信息輸出

  • 定義學生的姓名與年齡
  • 打印信息

使用面向過程的方式實現

# 遍歷打印所有姓名-年齡
def print_info(names_temp, ages_temp):print("姓名:", names_temp, " 年齡:", ages_temp)# 定義一個變量存儲姓名
name = "小明"
# 定義一個變量存儲年齡
age = 20# 遍歷姓名-年齡
print_info(name, age)

分析

從上述通過面向過程方式實現的代碼中,我們可以發現代碼行數不是很多,整個程序比較簡單。

但是上面的代碼雖然看上去簡單,實際上如果我們想要進行升級功能則不見得容易,例如:我們需要在上述的代碼基礎上修改并實現三名同學的信息存儲,那么應該怎么辦呢?看看下面的方式是否可行?有什么不好的地方?

# 遍歷打印所有姓名-年齡
def print_info(names_temp, ages_temp):print("姓名:", names_temp, " 年齡:", ages_temp)# 定義第1個人的信息,然后輸出
name = "小明"
age = 20
print_info(name, age)# 定義第2個人的信息,然后輸出
name = "雙雙"
age = 22
print_info(name, age)# 定義第3個人的信息,然后輸出
name = "安娜"
age = 23
print_info(name, age)

下面對代碼進行優化:

# 遍歷打印所有姓名-年齡
def print_info(names_temp, ages_temp):print("姓名:", names_temp, " 年齡:", ages_temp)# 定義第1個人的信息,然后輸出
names = ["小明", "雙雙", "安娜"]
ages = [20, 22, 23]
print_info(names[0], ages[0])
print_info(names[1], ages[1])
print_info(names[2], ages[2])

上面我們使用了列表進行了升級,避免了定義多個變量的問題。但是你是否有這樣的感覺,即便是升級了總感覺還是不夠好。如果有這種感覺就對了,因為上面的這種方式就是面向過程開發,這種開發模式就是一步步的對需要的數據以及方法進行操作。因此出現代碼亂的情況,在所難免。

使用面向對象的方式實現

下面代碼是使用面向對象開發模式,實現一名同學的信息輸出:

class Person:def __init__(self, name, age):self.name = nameself.age = age# 遍歷打印所有姓名-年齡def print_info(self):print("姓名:", self.name, " 年齡:", self.age)# 創建一個對象
p = Person("小明", 20)
p.print_info()按照這個思路,如果想要創建三個人呢?見如下代碼:按照這個思路,如果想要創建三個人呢?見如下代碼:
# 創建另外2個對象
p2 = Person("雙雙", 22)
p2.print_info()
p3 = Person("安娜", 23)
p3.print_info()

上述代碼第十二行代碼中定義了一個Person類的變量p讓這它指向一個對象,在這個對象中有name、age以及打印信息的功能代碼(本節僅僅是引出面向對象的好處,詳細的對象等知識接下來詳細講解),這樣一來想要表示一個人就創建一個Person類的對象即可,如果不看第1~10行,只看第12~13行的話,就會有一種感覺:原來模擬創建一個人只需要這么簡單的代碼

面向過程與面向對象的對比分析

通過上述兩種代碼的實現方式(面向過程、面向對象)我們能夠的粗以下幾個結論:

  • 面向過程:根據業務邏輯從上到下寫代碼
  • 面向對象:將數據與函數綁定到一起,進行封裝,這樣能夠更快速的開發程序,減少了重復代碼的重寫過程
  • 面向過程編程最易被初學者接受,其往往用一長段代碼來實現指定功能,開發過程的思路是將數據與函數按照執行的邏輯順序組織在一起,數據與函數分開考慮。

簡單總結

面向對象編程(Object Oriented Programming-OOP) 是一種解決軟件復用的設計和編程方法。

這種方法把軟件系統中相近相似的操作邏輯、操作應用數據和狀態用類的型式描述出來,以對象實例的形式在軟件系統中復用,以達到提高軟件開發效率的作用。

簡單來說:面向對象能實現的功能,面向過程也能實現,往往程序的代碼量都比較大,如果用面向過程的方式實現則代碼冗余且不已升級,使用面向對象將數據與功能進行封裝在中大程序開發中首先考慮使用。

三.類與對象

對象是面向對象編程的核心,在使用對象的過程中,為了將具有共同特征和行為的一組對象抽象定義,提出了另外一個新的概念:類

  • 類,就相當于制造飛機時的圖紙,想象成模具
  • 對象,就相當于創建的飛機,想象成通過模具制造出的物品

相關概念

人以類聚,物以群分。具有相似內部狀態和運動規律的實體的集合(或統稱為抽象)。 具有相同屬性和行為事物的統稱

類是抽象的,在使用的時候通常會找到這個類的一個具體的存在,并使用這個具體的存在,一個類可以找到多個對象。

示例:

class Person:def __init__(self, name, age):self.name = nameself.age = age# 遍歷打印所有姓名-年齡def print_info(self):print("姓名:", self.name, " 年齡:", self.age)

對象

某一個具體事物的存在 ,在現實世界中可以是看得見摸得著的。可以是直接使用的

示例:

Person("安娜", 20)  # 執行完之后返回值就是對象的引用

類與對象的關系

先有類,通過類創建對象

用一個生活中的例子來說明:某公司在簽署某個合同時往往需要在文件中蓋章,在紙質合同上的印章圖案就是對象,那么印章就是類。

一句話說明:類是模板,對象是類這個模板生產出來的具體的產品。

類的構成

類class由三個部分組成:

  • 類的名稱:類名
  • 類的屬性:一組數據
  • 類的方法:允許對進行操作的方法 (行為)

示例:

如何創建人物對象

  • 事物名稱(類名):人(Person)
  • 屬性:身高(height)、年齡(age)
  • 方法(行為/功能):跑(run)、打架(fight)

如何創建狗類對象

  • 類名:狗(Dog)
  • 屬性:品種 、毛色、性別、名字、 腿兒的數量
  • 方法(行為/功能):叫 、跑、咬人、吃、搖尾巴

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912316.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Requests源碼分析:面試考察角度自驗(初級)

簡單描述執行流程 Q:能簡單描述一下發送一個requests.get(url)請求時,在requests庫內部的主要執行流程嗎?(從調用get方法到收到響應) 入口委托: get() 方法內部調用 requests.request(GET, url)。Session 接管: request() 方法會獲取或隱式創建一個 Session 對象,并調用…

鴻蒙5:條件-循環-列表渲染

注意:博主有個鴻蒙專欄,里面從上到下有關于鴻蒙next的教學文檔,大家感興趣可以學習下 如果大家覺得博主文章寫的好的話,可以點下關注,博主會一直更新鴻蒙next相關知識 專欄地址: https://blog.csdn.net/qq_56760790/…

淺談AI大模型-MCP

MCP簡介 MCP(Model Context Protocol,模型上下文協議 ),24年11月初的時候Anthropic發了一篇技術博客,推出了他們的模型上下文協議MCP,介紹了一種規范:應用如何為LLM提供上下文。官網稱MCP為AI應…

MySQL數據庫基礎概述

前言: MySQL作為全球應用最廣泛的開源關系型數據庫管理系統(RDBMS)?,憑借其高性能、高可靠性與零成本特性,已成為Web應用、企業系統的核心數據引擎。它遵循SQL標準,通過表結構實現數據的結構化存儲&#x…

桌面小屏幕實戰課程:DesktopScreen 16 HTTP

飛書文檔http://https://x509p6c8to.feishu.cn/docx/doxcnrxBs55qGn6xoysTcJpqwRf /home/kemp/work/esp/esp-idf/examples/protocols/http_request 源碼下載方式參考: 源碼下載方式 心知天氣 注冊賬號,申請產品,獲取密鑰 產品 天氣數據 H…

vs2019 + QT下 vs2019創建的項目打開ui文件失敗

問題: 在vs2019 QT模式下。使用2019創建工程后。點擊ui文件打開時。出現奔潰,如下圖 解決方式: ui文件->右鍵->打開方式->添加->程序->點擊三個點->qcreator(qt安裝目錄) ->設置為默認值->確定 點擊設置為默認值,點…

WPS之PPT鏤空效果實現

1、準備一張圖片,剪切存入剪貼板 2、把圖片設為背景 右鍵 》 設置背景格式 》 圖片或紋理填充 》 圖片填充選擇剪貼板 3、插入一個矩形覆蓋全圖,設置無線條漸變填充從左到右 4、插入圓角矩形 5、單擊小黃點調整弧度 6、選擇無線條幻燈片背景填充 7、插…

服務注冊中心的本質抉擇:從業務本質看AP與CP的終極之選

本文從服務注冊中心的本質職責出發,通過分析其核心功能、業務場景和技術約束,深入探討服務注冊中心在架構設計上應該優先保證AP還是CP特性。文章首先剖析服務注冊中心的根本使命,然后從分布式系統原理、生產實踐案例和性能表現三個維度進行對…

mybatis-plus從入門到入土(一):快速開始

? 朋友們, 大家好, 從今天開始我想開一個系列博客。名字起的比較隨意就叫Mybatis-Plus從入門到入土, 這系列博客的定位是從基礎使用開始, 然后逐步深入全面的了解Mybatis-Plus框架, 寫這個博客的主要原因是工作中經常用到Mybatis-Plus框架, 因而對這個框架相對比較了解一些, 順…

如何快速將iPhone中的文本保存到電腦上

您的 iPhone 上是否有很多重要的短信,并且您想將短信備份到計算機上?我們都知道傳輸消息與傳輸照片不同,但幸運的是,您可以使用相關的工具和方法來實現。我們介紹了 4 種方法來解釋如何將 iPhone 中的文本保存到計算機。所有的辦法…

【OpenGL學習】(八)圖形變換

OpenGL圖形變換介紹:https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations 【OpenGL學習】(八)圖形變換 本項目將通過變換矩陣,對【OpenGL學習】(七)紋理單元 中的圖形進行縮放…

從理論到實戰:解密大型語言模型的核心技術與應用指南

一、Transformer:語言理解與生成的基石 Transformer 架構的出現,徹底改變了自然語言處理(NLP)的格局。它以“注意力”為核心,將全局依賴的捕捉效率推向新高。下面用 圖簡要概覽其數據流: 從上圖可見&#…

kali換源

在Kali Linux中切換軟件源可以提高軟件下載速度,下面為你介紹切換源的方法。 一、備份原配置文件 首先備份原配置文件,避免操作失誤導致問題: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak二、編輯源配置文件 使用以下命令編…

從決策樹到隨機森林:Python機器學習里的“樹形家族“深度實戰與原理拆解

引言 在機器學習的算法森林中,有一對"樹形兄弟"始終占據著C位——決策樹像個邏輯清晰的"老教授",用可視化的樹狀結構把復雜決策過程拆解成"是/否"的簡單判斷;而它的進階版隨機森林更像一支"精英軍團&quo…

uniapp,每次請求時,中斷上次請求

1.封裝uni.request import {BASE_URL} from "/config/config.js"import store from "/store/index.js"; class RequestManager {constructor() {this.requestTasks new Map() // 存儲所有請求任務this.baseURL BASE_URLthis.header {Content-Type: app…

DuDuTalk | 武漢賽思云科技有限公司通過武漢市人工智能企業認定!

近日,2025年武漢市人工智能企業名單正式公布!武漢賽思云科技有限公司(以下簡稱賽思云科技)憑借卓越的技術實力與創新成果,成功入選武漢市人工智能企業。這是對公司長期深耕AI語音智能領域、推動數字化轉型的高度認可&a…

STM32實現傅里葉變換精確計算采樣電流值

以下是基于離散傅里葉變換(DFT)算法在單片機上實現精確電流值計算的全流程指南,結合硬件選型、算法優化、代碼實現及實際應用場景分析,綜合多篇技術文檔的實踐要點: ?? 一、系統設計核心要點 硬件選型與配置 單片機選擇:優先采用帶硬件浮點單元(FPU)的STM32F4/F7系列…

python 爬蟲 下載視頻

測試 OK II 在開發者工具里面 直接搜索m3u8 可以直接找相對應連接地址繼續分析 這個m3u8 url地址是從哪里過來的 在什么地方有 III 我們想要視頻數據 <m3u8連接> 在 網頁源代碼里面有獲取整個視頻內容 --》分為N個視頻片段《ts文件》-->在m3u8連接里面--> 視頻播放…

希爾伯特空間:無窮維度的幾何世界

希爾伯特空間&#xff1a;無窮維度的幾何世界 從量子物理到信號處理&#xff0c;希爾伯特空間為現代科學與工程提供了強大的數學框架 引言&#xff1a;無限維度的舞臺 在數學和物理學的廣闊領域中&#xff0c;希爾伯特空間扮演著至關重要的角色。這個完備的內積空間不僅推廣了…

Transformer結構與代碼實現詳解

參考&#xff1a; Transformer模型詳解&#xff08;圖解最完整版&#xff09; - 知乎https://zhuanlan.zhihu.com/p/338817680GitHub - liaoyanqing666/transformer_pytorch: 完整的原版transformer程序&#xff0c;complete origin transformer programhttps://github.com/lia…