面向對象編程——python

目錄

一、面向對象編程? ? ? ??

1.1 類和對象

1.2 繼承

1.3 封裝

1.4 多態

1.5 Python中的面向對象編程

二、類、對象和變量

2.1 類(Class)

2.2.1 類的屬性(Class Attributes)

2.2.2 類的方法(Class Methods)

2.2 對象(Object)

2.3 變量(Variable)

三、總結


一、面向對象編程? ? ? ??

????????面向對象編程(Object-Oriented Programming,簡稱 OOP)是一種編程范式,它使用“對象”來設計軟件。在這種范式中,對象是類的實例,類定義了對象的數據屬性和可執行的操作(即方法)。面向對象編程的主要目標是增加軟件的重用性、靈活性和擴展性。

1.1 類和對象

????????類(Class):定義了一組屬性和方法的藍圖。類是對象的模板,確定了對象的數據結構和行為。

????????對象(Object):類的實例。每個對象都擁有類中定義的屬性和方法。

1.2 繼承

????????允許一個類繼承另一個類的特性。子類繼承父類的公共接口,這樣代碼可以被重用,并且可以創建出層次結構。

1.3 封裝

????????將數據(屬性)和代碼(方法)捆綁在一起,形成一個獨立的對象。這種機制可以隱藏內部實現細節,只暴露必要的操作接口。

1.4 多態

????????允許以統一的方式處理不同類的對象。通常通過方法重寫(子類定義與父類同名的方法)和接口(定義可以由多個類實現的同一套操作)實現。

1.5 Python中的面向對象編程

????????Python 是一種支持多范式的語言,包括面向對象編程。下面是一個簡單的 Python 中使用 OOP 的例子:

# 定義一個類
class Animal:def __init__(self, name):  # 構造函數self.name = name  # 屬性def speak(self):  # 方法raise NotImplementedError("Subclass must implement abstract method")# 定義繼承自 Animal 的類
class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"# 使用類創建對象
dog = Dog("Buddy")
cat = Cat("Whiskers")# 調用方法
print(dog.speak())  # 輸出: Woof!
print(cat.speak())  # 輸出: Meow!

二、類、對象和變量

????????在面向對象編程(OOP)中,理解類、對象、和變量之間的關系對于編寫高質量的代碼是非常重要的。下面我們將更詳細地討論這些概念,以及它們是如何相互作用和支持編程模型的。

2.1 類(Class)

????????類是一種復合數據類型,是對象的藍圖或模板。你可以將類視為一個創建對象的配方。類定義了一系列屬性(變量)和方法(函數),這些屬性和方法被該類的所有實例所共享。

  • 屬性(Attributes):是綁定到類或類的實例上的變量。它們用于存儲數據或狀態。
  • 方法(Methods):是定義在類內部的函數,用于描述類的行為或與對象的交互方式。
class Car:wheels = 4  # 類變量,所有 Car 實例共享def __init__(self, make, model):self.make = make  # 實例變量self.model = model  # 實例變量def display_info(self):return f"{self.make} {self.model} has {Car.wheels} wheels"

????????在這個例子中,Car 類定義了一個類變量 wheels 和兩個實例變量 makemodel。方法 display_info 是一個實例方法,用來顯示車輛的信息。

????????在面向對象編程(OOP)中,類是構建和管理數據的主要方式。類通過其屬性和方法定義了其實例的結構和行為。理解類的屬性和方法對于有效使用面向對象編輯至關重要。下面我們將詳細探討類的屬性和方法,并提供相應的代碼示例。

2.2.1 類的屬性(Class Attributes)

????????類的屬性是綁定到類本身的變量,它們定義了與類相關的數據。類的屬性可以是實例變量或類變量:

  • 實例變量:這些變量是為類的每個實例單獨存儲的。每個對象可以擁有實例變量的獨立副本。
  • 類變量:這些變量是由類的所有實例共享的。它們不屬于任何一個實例,而是屬于類本身。
class Dog:species = "Canine"  # 類變量,所有 Dog 實例共享def __init__(self, name, age):self.name = name  # 實例變量self.age = age    # 實例變量

????????在這個例子中,species 是一個類變量,所有 Dog 類的實例都共享這個變量。而 nameage 是實例變量,每個 Dog 實例都有其自己的 nameage 值。

2.2.2 類的方法(Class Methods)

????????方法是定義在類中的函數,用于執行與對象相關的操作。方法可以訪問和修改對象的狀態(實例變量)或類的狀態(類變量)。方法分為幾種類型:

  • 實例方法:最常見的方法類型,第一個參數通常是 self,它表示類的一個實例。
  • 類方法:使用裝飾器 @classmethod 標記,第一個參數是 cls,它表示類本身。類方法可以訪問和修改類變量。
  • 靜態方法:使用裝飾器 @staticmethod 標記,不接收 selfcls 參數。靜態方法不能訪問類或實例的任何屬性,主要用于實現與類的狀態無關的功能。
class Dog:species = "Canine"  # 類變量def __init__(self, name, age):self.name = name  # 實例變量self.age = age    # 實例變量def speak(self):  # 實例方法return f"{self.name} says Woof!"@classmethoddef get_species(cls):  # 類方法return cls.species@staticmethoddef info():  # 靜態方法return "Dogs are domestic animals."

????????在這個例子中,speak 是一個實例方法,它使用 self 來訪問調用它的特定實例的屬性。get_species 是一個類方法,它使用 cls 來訪問類變量。info 是一個靜態方法,它不訪問任何實例或類屬性。?

2.2 對象(Object)

????????對象是類的實例。當類被實例化時,計算機內存中將創建一個對象。這個對象包含其類定義的所有屬性,并且可以使用定義在類中的方法。

  • 實例化:創建類的實例的過程稱為實例化,這通常通過調用類的構造方法(__init__ 方法)來完成。
my_car = Car("Toyota", "Corolla")  # 創建 Car 類的一個實例
print(my_car.display_info())  # 輸出: Toyota Corolla has 4 wheels

????????這里 my_car?指向的是 Car 類的一個對象,具有獨立的 makemodel 屬性值,但共享 wheels 屬性。

2.3 變量(Variable)

????????變量是編程中用來存儲數據的基本單位。在面向對象編程中,變量可以有幾種不同的形式:

  • 局部變量:在方法中定義,只在方法的作用域內可見。
  • 實例變量:通過使用 self 關鍵字在類的方法中定義,與特定的對象實例綁定。
  • 類變量:在類定義中創建,為類的所有實例共享。
class Car:wheels = 4  # 類變量def __init__(self, make, model):self.make = make  # 實例變量self.model = model  # 實例變量def update_wheels(self, number):Car.wheels = number  # 修改類變量# 修改 Car 類的 wheels 類變量
my_car = Car("Toyota", "Corolla")
another_car = Car("Honda", "Civic")
my_car.update_wheels(6)
print(another_car.wheels)  # 輸出: 6,展示類變量是如何被所有實例共享的

三、總結

????????面向對象編程(OOP)是一種將程序視為一系列交互的“對象”的編程范式,每個對象都是其特定類的實例。類定義了對象的結構(屬性)和可以執行的操作(方法)。這種方法不僅有助于增強軟件的可重用性、可維護性和靈活性,還通過封裝、繼承和多態等核心概念來簡化復雜系統的開發和管理。利用類和對象,開發者可以更高效地編寫模塊化的代碼,更容易地修改和擴展已有功能,從而應對日益復雜的軟件開發需求。

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

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

相關文章

對類與對象的(二)補充

1.Date這樣的構造函數 析構函數 拷貝構造 默認構造函數有三種 :全缺省的構造函數 無參的構造函數 和編譯器默認生成的構造函數 class Date {pubilc:void Print() { } private://全缺省的int year1;int month1;int …

二叉樹的廣度優先搜索(層次遍歷)

目錄 定義 層序遍歷的數據結構 實現過程簡述 具體代碼 定義 層序遍歷就是從左到右一層一層地遍歷二叉樹。 層序遍歷的數據結構 層序遍歷需要借用一個輔助數據結構實現,由于隊列具有先進先出的特性,符合一層一層遍歷的邏輯,而棧先進后出…

PHP框架之Laravel框架

Laravel框架詳解 Laravel,作為一款廣受歡迎的PHP Web開發框架,以其優雅、簡潔的語法和強大的功能特性,贏得了全球眾多開發者的青睞。下面,我們將從Laravel的特點、應用案例以及具體的框架使用等方面進行詳細解析。 一、Laravel框…

甲子光年專訪天潤融通CEO吳強:客戶經營如何穿越低速周期?

作者|陳楊、編輯|栗子 社會的發展從來都是從交流和聯絡開始的。 從結繩記事到飛馬傳信,從電話電報到互聯網,人類的聯絡方式一直都在隨著時代的發展不斷進步。只是傳統社會通信受限于技術導致效率低下,對經濟社會產生影…

LLaMA:挑戰大模型Scaling Law的性能突破

實際問題 在大模型的研發中,通常會有下面一些需求: 計劃訓練一個10B的模型,想知道至少需要多大的數據?收集到了1T的數據,想知道能訓練一個多大的模型?老板準備1個月后開發布會,給的資源是100張A100,應該用多少數據訓多大的模型效果最好?老板對現在10B的模型不滿意,想…

退市新規解讀—財務類強制退市

一、退市風險警示:第一年觸及相關指標 上市公司最近一個會計年度觸及下列退市風險指標之一,公司股票或存托憑證被實施退市風險警示(*ST): 第1項 組合類財務指標 僅發行A股或B股,最近一個會計年度或追溯重述后最近一個會計年度 …

Leetcode 102.目標和

給定一個正整數數組 nums 和一個整數 target 。 向數組中的每個整數前添加 ‘’ 或 ‘-’ ,然后串聯起所有整數,可以構造一個 表達式 : 例如,nums [2, 1] ,可以在 2 之前添加 ‘’ ,在 1 之前添加 ‘-’ &…

C#面:C#屬性能在接口中聲明嗎?

在C#中,接口是一種定義了一組方法、屬性和事件的類型。在接口中,只能聲明方法、屬性和事件的簽名,而不能包含字段、構造函數或實現代碼。因此,C#屬性不能直接在接口中聲明。 然而,你可以在接口中定義屬性的簽名&#…

VMware的具體使用

📑打牌 : da pai ge的個人主頁 🌤?個人專欄 : da pai ge的博客專欄 ??寶劍鋒從磨礪出,梅花香自苦寒來 目錄 一🌤?VMware的安…

用戶登錄錯誤次數太多鎖定賬號

當用戶登錄驗證碼錯誤次數太多時,需要限制用戶在10分鐘之內不能再次登錄。 限制方案: 1.通過Redis ZSet key可以設置為用戶名,value可以設置為UUID,score設置為當前時間戳 每次用戶登錄時,通過 rangeByScore 查詢對…

Ubuntu22安裝PyCharm

下載(社區版) 官網下載地址 解壓 sudo tar -xzvf pycharm-community-2024.1.4.tar.gz 軟件移動到指定目錄下(根據不同版本修改) sudo mv pycharm-community-2024.1.4/ /usr/local/PyCharm/運行 cd /usr/local/PyCharm/pycha…

使用PEFT庫進行ChatGLM3-6B模型的LORA高效微調

PEFT庫進行ChatGLM3-6B模型LORA高效微調 LORA微調ChatGLM3-6B模型安裝相關庫使用ChatGLM3-6B模型GPU顯存占用準備數據集加載模型加載數據集數據處理數據集處理配置LoRA配置訓練超參數開始訓練保存LoRA模型模型推理從新加載合并模型使用微調后的模型 LORA微調ChatGLM3-6B模型 本…

6 序列數據和文本的深度學習

6.1 使用文本數據 文本是常用的序列化數據類型之一。文本數據可以看作是一個字符序列或詞的序列。對大多數問題,我們都將文本看作詞序列。深度學習序列模型(如RNN及其變體)能夠從文本數據中學習重要的模式。這些模式可以解決類似以下領域中的問題: 自然…

JVM專題十一:JVM 中的收集器一

上一篇JVM專題十:JVM中的垃圾回收機制專題中,我們主要介紹了Java的垃圾機制,包括垃圾回收基本概念,重點介紹了垃圾回收機制中自動內存管理與垃圾收集算法。如果說收集算法是內存回收的方法論,那么垃圾收集器就是內存回…

【開發者推薦】告別繁瑣:一鍵解鎖國產ETL新貴,Kettle的終結者

在數字化轉型的今天,數據集成的重要性不言而喻。ETL工具作為數據管理的核心,對企業決策和運營至關重要。盡管Kettle廣受歡迎,但國產ETL工具 TASKCTL 以其創新特性和卓越性能,為市場提供了新的選擇。 TASKCTL概述 TASKCTL 是一款免…

wget之Win11中安裝及使用

wget之Win11中安裝及使用 文章目錄 wget之Win11中安裝及使用1. 下載2. 安裝3. 配置環境變量4. 查看及使用1. 查看版本2. 幫助命令3. 基本使用 1. 下載 下載地址:https://eternallybored.org/misc/wget 選擇對應的版本進行下載即可 2. 安裝 將下載后的wget-1.21.4-w…

中醫實訓室:在傳統針灸教學中的應用與創新

中醫實訓室是中醫教育體系中的重要組成部分,尤其在傳統針灸教學中,它扮演著無可替代的角色。這里是理論與實踐的交匯點,是傳統技藝與現代教育理念的碰撞之地。本文將探討中醫實訓室在傳統針灸教學中的應用與創新實踐。 首先,實訓室…

ResultSet的作用和類型

ResultSet的作用: ResultSet在Java中主要用于處理和操作數據庫查詢結果。它是一個接口,提供了一系列方法來訪問和操作數據庫查詢得到的結果集。具體來說,ResultSet的作用包括: 獲取查詢結果:通過ResultSet可以獲取數…

C++中指針的使用方法

基本概念 指針:一個變量,它存儲另一個變量的內存地址。地址運算符 &:用于獲取變量的內存地址。間接運算符 *:用于訪問指針所指向的變量的值。 聲明和初始化 int a 10; // 定義一個整數變量 int *p &a; // 定…

算法導論 總結索引 | 第四部分 第十六章:貪心算法

1、求解最優化問題的算法 通常需要經過一系列的步驟,在每個步驟都面臨多種選擇。對于許多最優化問題,使用動態規劃算法求最優解有些殺雞用牛刀了,可以使用更簡單、更高效的算法 貪心算法(greedy algorithm)就是這樣的算…