python的面向對象編程

為什么要面向對象編程?

偉大的領袖毛澤東曾說過:編程最大的敵人是重復

  • 最開始,在程序中寫的一條條語句,在執行的時候會變成一條條指令交給CPU執行。這就是**“程序是指令的集合”** 。
  • 為了簡化程序的設計,引入了函數的概念。把相對獨立、經常重復使用的代碼放到函數中。當一個函數的語句過多的時候,我們就給它拆分成一個個子函數。函數式編程
  • 單當程序到極度復雜的時候,單純的函數無法滿足維護、開發、升級的工作。于是有人提出面向對象編程。推翻了以 小塊函數為單位的思想,而是把數據+函數組成的對象為最小單位。

什么是面向對象編程?

你肯定聽過,面向對象的三大要素:封裝、繼承和多態。

正式的說法:把一組數據結構和處理他們的方法組成對象 (object), 把相同行為的對象歸納為類 (class), 通過類的封裝 ( encapsulation)隱藏內部細節,通過繼承 (inheritance)實現類的特殊化 (specialization)和 廣泛化 (generalization), 通過多態 (polymorphism)實現基于對象類型的動態分派。

是不是很難懂?說起來也拗口,沒有基礎的人根本看不懂。

這樣講吧,我們在出生的時候就被賦予一個類 (人),我們自身有一些屬性 (身高,體重 ,年齡),還有一些技能,也就是方法 ( 吃飯 、呼吸 )

  • 封裝:你今年多少歲了,你只需要告訴別人結果,不用告訴人你是怎么算的,不需要知道內部實現細節。這就是封裝。
  • 繼承:我們之所以有這些屬性、技能,是因為我們的父母也是人,我們是遺傳基因得來的。
  • 多態:一些人演化出來特有技能,比如倒立洗頭,泡妹。但有一些人不會。

說了這么多,面向對象是一種思想,范式,約定。你也可以不這么做,也能寫代碼,只是可能,當應用復雜到一定程度,只有你看的懂,無法同其他人交流。

面向過程與面向對象對比

假設我們要處理學生的成績表,打印一個學生的成績: 姓名 + 分數,面向過程的程序可以用一個dict表示:

std1 = { 'name': 'Michael', 'score': 98 }
std2 = { 'name': 'Bob', 'score': 81 }

函數式編程的思想就是,直接思考程序的執行 , 面向過程

def print_score(std):print(f'{std[name]} : {std[score]}')

面向對象的編程思想 ,則首先思考的是 std 應該是一個 學生對象,有 姓名(name) 和 分數 (score) 這兩個屬性。有一個技能打印成績 print_score() , 如果要打印成績需要,先創建一個學生,然后告訴學生我要打印成績。

class Student(object):def __init__(self, name, score):self.name = nameself.score = scoredef print_score(self):print(f'{std[name]} : {std[score]}')
zhangsan = Student('張三', 59)
lisi = Student('李四', 87)
zhangsan.print_score()
lisi.print_score()

類的定義和實例

下面是一個類

class Student(object):def __init__(self, name, score):self.name = nameself.score = scoredef print_score(self):print(f'{std[name]} : {std[score]}')

__init__是一個特殊方法用于在創建對象時進行初始化操作 , 為學生對象綁定 namescore 兩個屬性

  • 注意:特殊方法“__init__”前后分別有兩個下劃線!!!
  • 注意到__init__方法的第一個參數永遠是self,表示創建的實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到self,因為self就指向創建的實例本身。
  • 如果有了__init__方法,在創建實例的時候,就不能傳入空的參數了,必須傳入與__init__方法匹配的參數,但self不需要傳,Python解釋器自己會把實例變量傳進去:

def print_score(self) 和普通的函數相比,在類中定義的函數只有一點不同,就是第一個參數永遠是實例變量self,但是調用時,不用傳遞該參數。

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

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

相關文章

WebPages 全局:深入解析現代網頁設計與開發

WebPages 全局:深入解析現代網頁設計與開發 引言 隨著互聯網技術的飛速發展,網頁設計與開發已經成為了數字化時代的重要組成部分。從簡單的文本和圖像展示,到如今復雜的多媒體交互體驗,網頁設計經歷了翻天覆地的變化。本文將深入探討WebPages全局,包括網頁設計的基本概念…

Defensor 4.5:構建數據資產為中心的安全運營體系

5月31日“向星力”未來數據技術峰會上,星環科技重磅發布數據安全管理平臺 Defensor 4.5版本。新版本引入了以數據資產為中心的數據安全運營體系,通過智能化大模型技術,幫助企業快速、精準地識別核心重要資產;建設全局的數據安全策…

pytorch GPU cuda 使用 報錯 整理

GPU 使用、報錯整理 1. 使用指定GPU(單卡)1.1 方法1:os.environ[CUDA_VISIBLE_DEVICES]1.2 方法2:torch.device(cuda:2)1.3 報錯1:RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asy…

MySQL學習記錄 —— ?? 常用程序和配置文件

文章目錄 1、mysqld2、mysql常用命令介紹 3、配置文件語法 1、mysqld mysqld就是MySQL服務器,是一個多線程程序。對數據目錄,即mysql的主要工作目錄進行訪問管理。當mysqld啟動時,會偵聽指定的端口,處理來自客戶端程序的網絡連接…

【vue教程】二. Vue特性原理詳解

目錄 回顧本章涵蓋知識點Vue 實例和選項創建 Vue 實例Vue 實例的選項 Vue 模板語法插值表達式指令v-bindv-modelv-on 自定義指令創建自定義指令在模板中使用自定義指令自定義指令的鉤子函數自定義指令的實例演示 指令注冊局部注冊指令過濾器 數據綁定和響應式原理響應式數據綁定…

Oracle邏輯備份

邏輯備份 expdp 備份恢復表空間 創建測試數據 # 創建表空間 create tablespace itpux01 datafile /oradata/fghsdb/itpux01.dbf size 100m autoextend off extent management local autoallocate segment space management auto; create tablespace itpux02 datafile /o…

編程題目積累(day5)

題目: 源數組a,將a中所有元素乘以2之后添加進a,則這個a就叫雙倍數組,給你一個數組a,判斷它是不是雙倍數組,如果是則輸出源數組,不是則輸出空數組。 補充知識: python中枚舉和字典…

OAuth 和 SSO 場景中的 URL 語法解析

OAuth 和 SSO 場景中的 URL 語法解析 在 OAuth 和 SSO (Single Sign-On) 場景中,URL 是一個關鍵組件,用于在客戶端和服務器之間傳遞認證請求和響應。讓我們深入解析這個 URL: https://api.commerce.ondemand.com/occ/oauth/authorize?resp…

【python數據結構精講】雙端隊列

通過總結《流暢的Python》等書中的知識,總結Python中常用工具的方法。 deque,學名雙端隊列。 1. 常用方法 append():隊列尾部添加appendleft():隊首添加pop():移除隊列最后一個元素popleft():移除隊列第一…

AI算法14-套索回歸算法Lasso Regression | LR

套索回歸算法概述 套索回歸算法簡介 在統計學和機器學習中,套索回歸是一種同時進行特征選擇和正則化(數學)的回歸分析方法,旨在增強統計模型的預測準確性和可解釋性, 正則化是一種回歸的形式,它將系數估…

并發編程-06之Semaphore

一 Semaphore入門 1.1 什么是Semaphore Semaphore,俗稱信號量,它是操作系統中PV操作的原語在java的實現,它也是基于AbstractQueuedSynchronizer實現的。 Semaphore的功能非常強大,大小為1的信號量就類似于互斥鎖,通過同…

centos部署jar包

第一步: 將IDEA中的項目打包為jar,將這個jar文件放到centos服務器上的目錄里,我在opt新建api目錄,將jar文件放入,如下圖: 第二步: 將需要讀取的配置文件也放入此目錄(其他目錄也可以,和腳本中…

【筆記】記一次讀寫分離之shardingsphere.datasource導致數據源為空錯誤

錯誤: *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured. Reason: Failed to determin…

搭建RAG系統就這么簡單:LangChain|RAG是什么?

RAG是什么 “RAG”(Retrieval-Augmented Generation)是一種結合了檢索(Retrieval)和生成(Generation)的人工智能技術,它在大模型中被需要的原因包括: 知識豐富性: 大模…

探索數據結構與算法的奇妙世界 —— Github開源項目推薦《Hello 算法》

在浩瀚的編程與計算機科學領域中,數據結構與算法無疑是每位開發者攀登技術高峰的必經之路。然而,對于初學者而言,這條路往往布滿了荊棘與挑戰。幸運的是,今天我要向大家推薦一個令人振奮的項目——《Hello Algo》,它正…

ubuntu使用kubeadm搭建k8s集群

一、卸載k8s kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/# 自己選擇性刪除 坑點哦 rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cn…

C# Winform 自定義事件實戰

在C#的WinForms中,自定義事件是一種強大的工具,它允許你創建自己的事件,從而在特定條件下通知訂閱者。自定義事件通常用于封裝業務邏輯,使代碼更加模塊化和易于維護。下面我將通過一個實戰例子來展示如何在WinForms中創建和使用自…

多線程編程中的條件變量及其優化

本套課在線學習視頻(網盤地址,保存到網盤即可免費觀看): 鏈接:https://pan.quark.cn/s/7220b198cf00 在多線程編程中,條件變量是一種用于線程間通信和同步的機制。通過使用條件變量,可以有效地…

Prometheus + alermanager + webhook-dingtalk 告警

添加釘釘機器人 1. 部署 alermanager 1.1 下載軟件包 wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz 網址 :Releases prometheus/alertmanager (github.com) 1.2 解壓軟件包 mkdir -pv …

醫日健集團技術力量體現測試的背后

醫日健集團覆蓋式更新 科技日新月異的時代,醫日健集團始終走在行業的前列。近日,醫日健集團外勤技術人員全面對市場點位投放的數智藥房進行了新系統升級和機器測試,這是醫日健對于科技創新的最新嘗試。 以客戶體驗為核心優化新體驗 醫日健集團…