python類--python011

面向對象編程中的類的概念、屬性使用、繼承和類的改造問題等。

7.1 初識類

在軟件編程中,面向過程和面向對象是兩種主要的編程方法。面向過程的編程強調通過函數來實現特定的功能,具有靈活性,但在復雜系統中往往導致代碼重復,維護困難。面向對象編程(OOP)則通過類和對象來組織代碼,能夠更好地處理復雜性和提高代碼的可重用性和可維護性。

類(Class)是面向對象編程中的核心概念。它是一種抽象的模型,用來描述一組具有相同屬性和行為的對象。類定義了對象的狀態(屬性)和功能(方法),而對象則是類的實例化。類的定義通過將對象的屬性(數據)和行為(方法)封裝在一起,實現數據和功能的共享。

類的實例化

類是模板,而對象是類的實例。當我們定義了一個類之后,可以通過調用類的構造函數(__init__方法)來實例化對象。例如,定義一個表示“汽車”的類,汽車的屬性可以包括“顏色”、“品牌”和“車速”,而方法可以包括“加速”和“剎車”。

7.2 屬性使用

類中的屬性指的是與對象相關聯的數據。通常,類的屬性可以在類的構造方法中進行初始化,也可以通過傳遞參數來設置初始值。

屬性的初始化

__init__方法中,可以直接對屬性進行初始化。例如:

class Car:def __init__(self, brand, color):self.brand = brandself.color = color

在這個例子中,brandcolor就是屬性,它們通過__init__方法進行初始化。初始化時,可以根據需求傳入參數,賦予每個對象不同的屬性值。

7.3 類改造問題

繼承是面向對象編程中一個重要的特性。通過繼承,我們可以在已有類的基礎上創建新的類,繼承父類的屬性和方法,并且可以在子類中對這些方法進行重寫,添加新的功能。

繼承與方法重寫

繼承使得子類可以重用父類的代碼,減少代碼的重復。在Python中,繼承通過在類定義時指定父類來實現。例如:

class ElectricCar(Car):def __init__(self, brand, color, battery_size):super().__init__(brand, color)self.battery_size = battery_sizedef describe_battery(self):print(f"This car has a {self.battery_size}-kWh battery.")

在這個例子中,ElectricCar類繼承了Car類,并且重寫了__init__方法,新增了battery_size屬性,并添加了describe_battery方法。通過super(),我們可以調用父類的構造方法。

多重繼承

Python支持多重繼承,即一個子類可以繼承多個父類,這種機制允許子類擁有多個父類的特性。在使用多重繼承時,需要注意避免菱形繼承的問題,即父類之間可能存在相同的繼承層次。可以通過super()來解決這一問題。

7.4 私有

在面向對象編程中,有時我們希望某些屬性或方法不被外部直接訪問。Python通過在屬性或方法名前加上雙下劃線(__)來實現私有化,防止外部直接修改或調用。

私有屬性和方法
class Car:def __init__(self, brand, color):self.__brand = brand  # 私有屬性self.__color = color  # 私有屬性def __secret_method(self):print("This is a secret method.")

在這個例子中,__brand__color是私有屬性,__secret_method是私有方法。它們不能直接在類的外部訪問。

公有接口

為了訪問私有屬性或方法,通常我們會提供公有的接口方法。例如:

class Car:def __init__(self, brand, color):self.__brand = brandself.__color = colordef get_brand(self):return self.__brand

通過提供公開的方法get_brand,我們可以安全地獲取私有屬性__brand的值。

7.5 把類放到模塊中

在Python中,可以將類定義放入模塊中,這樣可以實現代碼的復用。模塊是一種組織代碼的方式,允許將相關的類和函數組織在一起,從而使得代碼更加模塊化和可維護。

創建和使用模塊

一個模塊就是一個Python文件,我們可以將類定義放在模塊文件中,然后在其他程序中通過import語句引入。例如:

# car.py
class Car:def __init__(self, brand, color):self.brand = brandself.color = colordef start_engine(self):print(f"The {self.brand} car engine started.")
# main.py
from car import Carmy_car = Car("Toyota", "red")
my_car.start_engine()

通過將類放到模塊中,我們可以在多個程序中共享這些類,提高代碼的復用性。

7.6 類回顧

面向對象編程不僅僅局限于動態類(可以創建實例的類),還有靜態類(不支持實例化)。靜態類通常用于封裝一些通用的方法,避免創建實例。例如,可以用靜態方法來實現工具類。

靜態方法

靜態方法通過@staticmethod裝飾器定義,它不需要訪問實例屬性或方法,只是執行獨立的任務。靜態方法可以直接通過類來調用,而不需要創建類的實例。例如:

class Math:@staticmethoddef add(a, b):return a + b

Math.add(2, 3)將返回5。

結語

面向對象編程的核心是類和對象。類使得我們可以將相關的屬性和方法組合在一起,從而提高代碼的模塊化、可重用性和可維護性。理解類的概念,掌握屬性、方法、繼承和封裝等特性,是深入掌握Python編程的關鍵。

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

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

相關文章

Python函數篇:從零到精通

一、函數1.1 為什么有函數我們對于一個項目時,會有上千甚至上萬條代碼,當我們要使用到某個函數時,例如我需要計算一個求和代碼,獲得求和的值來服務我們的項目,那我們可能會這樣#計算1~100的和 theSun 0 fo…

QT項目之記事本

本文用QT實現記事本功能。一、成品展示1.界面主要元素:1.標題為MyNoteBook;2.相應圖標為:打開文件,保存,退出;3.右下角標注光標所在行列,默認編碼方式為UTF-8;4.鼠標所在圖標位置時會…

【軟件測試】性能測試 —— 工具篇 JMeter 介紹與使用

🥰🥰🥰來都來了,不妨點個關注叭! 👉博客主頁:歡迎各位大佬!👈 文章目錄1. JMeter 的介紹2. JMeter 安裝、配置、搭建2.1 前置條件 —— Java環境搭建2.2 JMeter 下載2.3 JMeter 安裝…

二十二、Mybatis-快速入門程序

入門程序大概步驟敘述: 步驟一:創建springboot工程并且數據庫提前創建表步驟二:創建springboot工程對Mybatis相關依賴注意打勾步驟三:編寫查找方法步驟四:編寫測試方法項目目錄結構與數據庫以及代碼: 項目目…

Blender模擬結構光3D Scanner(一)外參數匹配

如何使用Blender模擬FPP(Fringe Projection Profilometry) 原理的結構光3D傳感器?主要包含的工作有:1)相機、投影儀定位與內外參數匹配;2)投影儀投射指定Pattern圖像;3)被測物體材質屬性配置等&…

LangChain是如何實現RAG多輪問答的

目錄引言一、LangChain實現RAG多輪問答核心機制1. 對話歷史管理(Memory)2. 問題重寫(Query Rewriting)3. 檢索增強生成(RAG Core)4. 鏈式工作流(Chain)二、關鍵設計特點三、完整示例…

DAY 44 預訓練模型

知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 一、預訓練的概念 我們之前在訓練中發現,準確率最開始隨著epoch的增加而增加。隨著循環的更新,參數在不斷發生更新。 所…

Java Stream API 中常用方法復習及項目實戰示例

在最近的練手項目中,對于stream流的操作愈加頻繁,我也越來越感覺stream流在處理數據是的干凈利落,因此寫博客用來記錄最近常用的方法以便于未來的復習。map() 方法map()是一個中間操作(intermediate operation)&#x…

從零開始手搓一個GPT大語言模型:從理論到實踐的完整指南(一)

現在人工智能飛速發展時代,LLM絕對可以算是人工智能領域得一顆明珠,也是現在許多AI項目落地得必不可少得一個模塊,可以說,不管你之前得研究領域是AI得哪個方向,現在都需要會一些LLM基礎,在這個系列&#xf…

Redis ubuntu下載Redis的C++客戶端

1. 安裝 redis-plus-plus C 操作 Redis 的庫有很多,這里選擇使用 redis-plus-plus,這個庫的功能強大,使用簡單。 Github 地址:GitHub - sewenew/redis-plus-plus: Redis client written in C 訪問不了Github 地址的可以使用Ste…

nm命令和nm -D命令參數

出現這種差異的原因在于:動態庫中的符號分為兩種類型: 常規符號表(regular symbol table):通常用于靜態鏈接和調試,默認不包含在動態庫中(除非顯式保留)。動態符號表(dyn…

Windows下cuda的安裝和配置

今天開始做一個cuda教程。由于本人主要在windows下使用visual studio進行開發,因此這里講一下windows下的cuda開發環境。 下載cuda_toolkit 從網站https://developer.nvidia.com/cuda-toolkit中下載,先選擇Download Now,然后跳轉到如下頁面&#xff1a…

【代碼隨想錄day 19】 力扣 450.刪除二叉搜索樹中的節點

視頻講解:https://www.bilibili.com/video/BV1tP41177us/?share_sourcecopy_web&vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解:https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%A…

智慧養老丨實用科普+避坑指南:科技如何讓晚年生活更安全舒適?

隨著老齡化社會的到來,智慧養老產品逐漸成為改善老年人生活質量的重要工具。從智能手表到便攜洗浴機,科技正為老年人的健康、安全與生活便利提供創新解決方案。我們這次主要介紹四類典型智慧養老產品,結合真實體驗給出選購建議,并…

系統垃圾清理批處理腳本 (BAT)

系統垃圾清理批處理腳本 (BAT) 以下是一個Windows系統垃圾清理的批處理腳本,它可以清理常見的系統臨時文件、緩存和日志等: echo off title 系統垃圾清理工具 color 0a echo. echo 正在清理系統垃圾文件,請稍候... echo.:: 清理臨時文件 echo…

Terraform的零基礎學習教程

一、Terraform 是什么? Terraform 是由 HashiCorp 開發的開源工具,用于自動化管理云基礎設施(如 AWS、Azure、GCP 等)。 核心特點: 基礎設施即代碼(IaC):用代碼定義和管理資源。跨…

429. N 叉樹的層序遍歷(中等)題解

題目描述給定一個 N 叉樹,返回其節點值的層序遍歷。(即從左到右,逐層遍歷)。樹的序列化輸入是用層序遍歷,每組子節點都由 null 值分隔(參見示例)。示例 1:輸入:root [1,…

Java 課程,每天解讀一個簡單Java之題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

package ytr250813;import java.io.IOException;public class CharacterCounter {public static void main(String[] args) throws IOException {// 初始化計數器變量int letterCount 0; // 英文字母計數器int spaceCount 0; // 空格計數器int digitCount 0; // 數字計數器i…

GitLab CI + Docker 自動構建前端項目并部署 — 完整流程文檔

一、環境準備1. 服務器準備一臺Linux服務器(CentOS/Ubuntu皆可),推薦至少4核8GB內存已安裝 Docker(及 Docker 服務已啟動)已安裝 GitLab Runner2. 服務器上安裝 Docker (如果沒裝)# CentOS9以下…

LCP 17. 速算機器人

目錄 題目鏈接: 題目: 解題思路: 代碼: 總結: 題目鏈接: LCP 17. 速算機器人 - 力扣(LeetCode) 題目: # LCP 17. 速算機器人 小扣在秋日市集發現了一款速算機器人。…