PYTHON從入門到實踐9-類和實例

# 【1】面向對象編程
class Student(object):# 可以幫屬性值綁定到對象上,self相當于JAVA的thisdef __init__(self, name, age):self.name = nameself.age = agedef speak(self):print(self.name, '說:老師好')if __name__ == '__main__':new_student1 = Student('球球', 20)new_student2 = Student('冷萌', 20)print(new_student1.name, new_student2.name)new_student1.speak()new_student2.speak()
# 【2】方法與屬性,就是包含在類里的方法和變量。結合方法和屬性才能更優雅的處理復雜邏輯!
# 【3】封裝、繼承、多態。JAVA很少用繼承了,PYTHON應該也相同

面向對象編程(Object-Oriented Programming, OOP)是現代編程語言中最重要的編程范式之一。Python作為一門多范式語言,對面向對象編程提供了全面支持。本文將帶你了解Python中面向對象編程的基礎知識,并通過實例演示如何在實際開發中應用這些概念。

一、面向對象編程基礎

面向對象編程的核心思想是將數據和操作數據的方法組織為"對象"的概念。在Python中,一切都是對象,包括數字、字符串、函數等。

讓我們從一個簡單的學生類開始:

python

復制

下載

class Student(object):# 初始化方法,相當于構造函數def __init__(self, name, age):self.name = name  # 將name屬性綁定到對象上self.age = age    # 將age屬性綁定到對象上def speak(self):print(self.name, '說:老師好')

在這個例子中:

  • class?關鍵字用于定義類

  • object?是所有類的基類

  • __init__?是類的初始化方法,相當于其他語言中的構造函數

  • self?參數代表類的實例,相當于Java中的this

二、創建和使用對象

創建類的實例非常簡單:

python

復制

下載

if __name__ == '__main__':new_student1 = Student('球球', 20)new_student2 = Student('冷萌', 20)print(new_student1.name, new_student2.name)  # 輸出: 球球 冷萌new_student1.speak()  # 輸出: 球球 說:老師好new_student2.speak()  # 輸出: 冷萌 說:老師好

每個對象都有自己獨立的狀態(屬性),但共享相同的行為(方法)。

三、面向對象的三大特性

1. 封裝

封裝是將數據和對數據的操作捆綁在一起,并隱藏內部實現細節的過程。在Python中,我們可以通過以下方式實現封裝:

python

復制

下載

class Student:def __init__(self, name, age):self._name = name  # 單下劃線表示受保護的屬性self.__age = age    # 雙下劃線表示私有屬性def get_age(self):return self.__agedef set_age(self, age):if age > 0:self.__age = ageelse:print("年齡必須大于0")

2. 繼承

繼承允許我們定義一個類,繼承另一個類的屬性和方法:

python

復制

下載

class CollegeStudent(Student):  # 繼承Student類def __init__(self, name, age, major):super().__init__(name, age)  # 調用父類的__init__方法self.major = majordef speak(self):print(self._name, '說:教授好')  # 重寫父類方法

3. 多態

多態指的是同一操作作用于不同的對象可以有不同的解釋:

python

復制

下載

def introduce(person):person.speak()student = Student('張三', 20)
college_student = CollegeStudent('李四', 21, '計算機科學')introduce(student)        # 輸出: 張三 說:老師好
introduce(college_student) # 輸出: 李四 說:教授好

四、Python面向對象編程的最佳實踐

  1. 避免過度使用繼承:正如文章開頭提到的,現代編程中很少使用深度繼承。組合優于繼承是更好的選擇。

  2. 使用@property裝飾器:Python提供了更優雅的屬性訪問方式

python

復制

下載

class Student:def __init__(self, name):self._name = name@propertydef name(self):return self._name@name.setterdef name(self, value):if not value:raise ValueError("姓名不能為空")self._name = value
  1. 類方法和靜態方法:理解何時使用實例方法、類方法和靜態方法

python

復制

下載

class Student:count = 0  # 類屬性def __init__(self, name):self.name = nameStudent.count += 1@classmethoddef get_count(cls):return cls.count@staticmethoddef is_adult(age):return age >= 18

五、總結

面向對象編程是Python中組織和構建代碼的強大工具。通過封裝、繼承和多態這三大特性,我們可以創建出結構良好、易于維護的代碼。然而,在實際開發中,我們應該根據具體需求選擇合適的編程范式,而不是盲目使用面向對象。

記住,Python的哲學是"簡單優于復雜",在不需要復雜類層次結構的情況下,簡單的函數和模塊可能更適合你的需求。

希望本文能幫助你更好地理解Python中的面向對象編程!如果你有任何問題或建議,歡迎在評論區留言討論。

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

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

相關文章

matplotlib 繪制極坐標圖

1、功能介紹: 使用了 matplotlib 庫來創建一個極坐標圖 2、代碼部分: import matplotlib.pyplot as plt import numpy as np# 設置中文字體 plt.rcParams[font.sans-serif] [SimHei] # 選擇黑體字體,支持中文 plt.rcParams[axes.unicode…

Dask心得與筆記【2】

文章目錄 計算參考文獻 計算 數組切片如下 import numpy as np import dask.array as dadata np.arange(1000).reshape(10, 100) a da.from_array(data, chunks(5, 20)) print(a[:,0:3])切片結果是前3列 dask.array<getitem, shape(10, 3), dtypeint64, chunksize(5, 3…

數據采集合規安全是品牌控價基石

在品牌控價與數據分析工作中&#xff0c;數據采集是不可或缺的前置環節。當前主流的數據采集方式為爬蟲采集&#xff0c;這種依托機器自動化操作的模式&#xff0c;取代了傳統人工逐一瀏覽、復制數據的繁瑣流程&#xff0c;大幅提升了效率。采集后的原始數據&#xff0c;會由系…

llm推理賦能action policy的探索

兄弟&#xff0c;你這個問題非常到位&#xff0c;咱分兩個問題詳細講透&#xff1a; &#x1f680; (1) HybridVLA怎么引入更好的推理能力賦能Diffusion Action&#xff1f; HybridVLA 目前設計的亮點&#xff1a; Diffusion Token 與 LLM 自回歸結合 但推理能力沒有被顯式結…

spring04-管理bean(創建、注入):基于注解

一、什么是注解&#xff1f; &#xff08;1&#xff09;注解的定義 注解&#xff08;Annotation&#xff09;是 Java 代碼中的一種特殊標記&#xff0c;用于在程序運行或編譯時提供元信息。 格式&#xff1a; 注解名(屬性名屬性值, 屬性名屬性值...)&#xff08;2&#xff…

docker安裝elasticsearch和kibana

elasticsearch版本和kibana版本需保持一致。這里我使用的都是8.18.2 安裝elasticsearch docker-compose.yml networks:es-net: external: true services:elasticsearch:container_name: es01deploy:resources:limits:cpus: 0memory: 0environment:- discovery.typesingle-no…

Python爬蟲實戰:研究sanitize庫相關技術

1. 引言 1.1 研究背景與意義 在當今數字化時代,互聯網已成為人們獲取信息、交流互動的重要平臺。隨著 Web 2.0 技術的發展,用戶生成內容 (UGC)、社交媒體嵌入、第三方插件等功能極大豐富了網頁的內容和交互性,但也帶來了嚴峻的安全挑戰。根據 Web 應用安全聯盟 (WAS) 的統…

c++ 學習(二、結構體)

目錄 一、結構體與const 二、結構體與class的區別 參考鏈接&#xff1a;69 結構體-結構體中const使用場景_嗶哩嗶哩_bilibili 一、結構體與const 調用函數的時候&#xff0c;希望這個結構體是可讀而不可寫的時候&#xff0c;傳指針&#xff0c;使用const修飾&#xff0c;方式…

機器學習開篇:算法分類與開發流程

種一棵樹最好的時間是十年前&#xff0c;其次是現在。 一、機器學習算法分類 機器學習&#xff08;ML&#xff0c;Meachine Learning&#xff09;是人工智能的核心領域&#xff0c;讓計算機從數據中學習規律并做出預測&#xff0c;本文簡單介紹機器學習的算法分類和開發流程。…

使用pyflink編寫demo并將任務提交到yarn集群

目錄 背景 一、pyflink安裝 二、編寫demo程序 三、提交yarn前準備 四、提交任務 五、踩坑記錄 1、提交任務時客戶端出現語法錯誤 2、提交任務時客戶端出現lzma包找不到 3、提交任務時客戶端出現“org.apache.flink.streaming.api.utils.PythonTypeUtils.getCollectionIn…

Vue 3 最基礎核心知識詳解

Vue3作為現代前端主流框架&#xff0c;是前后端開發者都應當掌握的核心技能。本篇文章將帶你了解vue3的基礎核心知識&#xff0c;適合學習與復習 一、Vue 3 應用創建 1.1 創建Vue應用的基本步驟 // main.js import { createApp } from vue // 1. 導入createApp函數 import …

Bootstrap 5學習教程,從入門到精通,Bootstrap 5 Flex 布局語法知識點及案例(27)

Bootstrap 5 Flex 布局語法知識點及案例 Bootstrap 5 提供了強大的 Flexbox 工具集&#xff0c;讓布局變得更加簡單靈活。以下是 Bootstrap 5 Flex 布局的完整知識點和詳細案例代碼。 一、Flex 布局基礎語法 1. 啟用 Flex 布局 <div class"d-flex">我是一個…

HarmonyOS 5智能單詞應用開發:記憶卡(附:源碼

一、應用概述與核心價值 在語言學習過程中&#xff0c;單詞記憶是基礎也是難點。本文介紹的智能單詞記憶卡應用通過創新的交互設計和科學的學習模式&#xff0c;幫助用戶高效記憶單詞。應用采用ArkUI框架開發&#xff0c;主要特點包括&#xff1a; 雙模式學習系統&#xff1a…

LeetCode--38.外觀數列

前言&#xff1a;之前我不是說&#xff0c;我后續可能會講一下遞歸嗎&#xff0c;現在它來了&#xff0c;這道題會用到回溯的方法&#xff0c;并且比較純粹哦 解題思路&#xff1a; 1.獲取信息&#xff1a;&#xff08;下面這些信息差不多是力扣上面的題目信息了&#xff0c;所…

服務器的安裝與安全設置

1&#xff1a;安裝操作系統 1、創建虛擬機Win49&#xff08;49為序號&#xff09;&#xff0c;并安裝Windows Server 2019操作系統 參考配置&#xff1a;安裝系統的分區大小為20GB&#xff0c;其余分區暫不劃分&#xff0c; 文件系統格式為NTFS&#…

Sensodrive SensoJoint機器人力控關節模組抗振動+Sensodrive力反饋系統精準對接

Sensodrive成立于2003年&#xff0c;起源于德國航空航天中心&#xff08;DLR&#xff09;的LBR項目。公司由一批傳感器技術專家創立&#xff0c;專注于高精度工業扭矩傳感器的研發。憑借二十余年的技術積累&#xff0c;Sensodrive將DLR輕型機器人扭矩技術引入工業領域&#xff…

【AI實踐】Mac一天熟悉AI模型智能體應用(百煉版)

25.6.29增加Gummy 實時/一句話語音識別25.6.28增加Qwen TTS本地音頻和實時播報 背景 準備環境 MacOS M1電腦&#xff08;其他M系列芯片也可以&#xff09; 為了方便python的使用環境&#xff0c;使用Miniconda&#xff1a;下載鏈接&#xff1a;Download Anaconda Distribution…

WEB安全--Java安全--jsp webshell免殺1

1.1、BCEL ClassLoader 介紹&#xff08;僅適用于BCEL 6.0以下&#xff09;&#xff1a; BCEL&#xff08;Apache Commons BCEL?&#xff09;是一個用于分析、創建和操縱Java類文件的工具庫&#xff1b;BCEL的類加載器在解析類名時會對ClassName中有$$BCEL$$標識的類做特殊處…

Valkey與Redis評估對比:開源替代方案的技術演進

#作者&#xff1a;朱雷 文章目錄 1 概述1.1內存數據結構存儲核心特性1.2主流內存數據結構存儲設計與適用場景1.3目前主流內存數據結構存儲對比 2 Valkey 說明2.1 哨兵架構設計2.2 集群架構設計2.3 valkey 使用企業和業內生態? 3 評估指標4 評估結果 1 概述 內存數據結構存儲…

華為云Flexus+DeepSeek征文 | 基于華為云ModelArts Studio安裝NoteGen AI筆記應用程序

華為云FlexusDeepSeek征文 | 基于華為云ModelArts Studio安裝NoteGen AI筆記應用程序 引言一、ModelArts Studio平臺介紹華為云ModelArts Studio簡介ModelArts Studio主要特點 二、NoteGen介紹NoteGen簡介主要特點 三、安裝NoteGen工具下載NoteGen軟件安裝NoteGen工具 四、開通…