(Python)類和類的方法(基礎教程介紹)(Python基礎教程)

源代碼:

class Students:stats="大學"def __init__(self,name,age,sex,credit):self.name=nameself.age=ageself.sex=sexself.credit=creditdef tell(self):return f"{self.name}說:你好"class Teachers(Students):stats="教師"def __init__(self, name, age, sex,pay):super().__init__(name, age, sex,0)self.pay=paydef tell(self):return f"{self.name}說:我不好"
student=Students("大炮",21,"男",10)
print(student.tell())
print(student.stats)
print(student.credit)teacher=Teachers("富貴",55,"男",10000)
print(teacher.tell())
print(teacher.stats)
print(teacher.pay)     

代碼詳解:

Python 類(Class)完全新手教程:從零理解面向對象編程

一、為什么需要類?真實世界類比

想象你要管理一所大學的學生和教師信息。沒有類時,你需要這樣存儲數據:

# 學生信息
student1_name = "大炮"
student1_age = 21
student1_sex = "男"
student1_credit = 10# 教師信息
teacher1_name = "富貴"
teacher1_age = 55
teacher1_sex = "男"
teacher1_pay = 10000

這種方式的三大問題

  1. 數據分散:相關信息分散在不同變量中

  2. 管理困難:添加新學生需要創建多個變量

  3. 行為缺失:無法定義與數據相關的操作(如自我介紹)

類的解決方案:

class Person:def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef introduce(self):return f"我是{self.name},{self.age}歲"student = Person("大炮", 21, "男")
teacher = Person("富貴", 55, "男")

二、類的基本結構詳解

學生類代碼分析
class Students:  # 1. 類定義stats = "大學"  # 2. 類屬性# 3. 構造方法def __init__(self, name, age, sex, credit):# 4. 實例屬性初始化self.name = nameself.age = ageself.sex = sexself.credit = credit# 5. 實例方法def tell(self):return f"{self.name}說:你好"
五個核心組件:
  1. 類定義class 類名:

    • 類名使用大駝峰命名法(如Students

    • 創建對象的藍圖

  2. 類屬性

    • 定義在類內部,方法外部

    • 所有對象共享同一值

    print(Students.stats)  # "大學"
  3. 構造方法?__init__

    • 創建對象時自動調用

    • self?參數代表當前對象(必須存在)

    • 用于初始化對象狀態

  4. 實例屬性

    • __init__中通過self.屬性名=值定義

    • 每個對象有獨立副本

    student1 = Students("小明", 20, "男", 5)
    student2 = Students("小紅", 19, "女", 8)
    print(student1.name)  # "小明"
    print(student2.name)  # "小紅"(不同值)
  5. 實例方法

    • 定義在類中的函數

    • 第一個參數必須是self

    • 通過對象調用:對象.方法()

    print(student1.tell())  # "小明說:你好"

三、創建和使用對象:從藍圖到實體

實例化過程
# 創建學生對象
student = Students("大炮", 21, "男", 10)

內存中發生了什么

  1. Python 在內存中分配新空間

  2. 調用?__init__?方法:

    Students.__init__(student, "大炮", 21, "男", 10)
  3. 初始化屬性:

    student.name = "大炮"
    student.age = 21
    student.sex = "男"
    student.credit = 10
訪問對象成員
# 訪問屬性
print(student.name)     # "大炮"(實例屬性)
print(student.stats)    # "大學"(類屬性)# 調用方法
print(student.tell())   # "大炮說:你好"

📌?重要提示:類屬性 vs 實例屬性

Students.stats = "學院"  # 修改類屬性
print(student.stats)    # 輸出"學院"(所有對象同步改變)student.name = "小炮"   # 修改實例屬性
print(student.name)     # 輸出"小炮"(僅影響當前對象)

四、繼承:創建教師類

繼承是面向對象的核心概念,允許我們基于現有類創建新類。

你的教師類代碼分析
class Teachers(Students):  # 1. 繼承語法stats = "教師"  # 2. 重寫類屬性# 3. 重寫構造方法def __init__(self, name, age, sex, pay):# 4. 調用父類構造方法super().__init__(name, age, sex, 0)  # 學分設為0self.pay = pay  # 5. 添加新屬性# 6. 重寫方法def tell(self):return f"{self.name}說:我不好"
繼承六大要點:
  1. 繼承語法class 子類(父類)

    • 教師類繼承學生類的所有屬性和方法

  2. 重寫類屬性

    • 子類定義同名屬性覆蓋父類

    python

    print(Teachers.stats)  # "教師"(而非"大學")
  3. 重寫構造方法

    • 子類可以定義自己的__init__

  4. super()函數

    • 調用父類的方法

    • super().__init__(參數)?初始化繼承的屬性

    • 必須放在子類構造方法開頭

  5. 添加新屬性

    self.pay = pay  # 教師特有屬性
  6. 重寫方法

    • 定義同名方法覆蓋父類實現

    teacher.tell()  # 調用子類版本:"富貴說:我不好"
繼承關系圖解


五、完整代碼執行流程分析

# ====== 學生部分 ======
student = Students("大炮", 21, "男", 10)# 1. 創建Students對象
# 2. 調用__init__:設置name="大炮", age=21, sex="男", credit=10
# 3. 類屬性stats="大學"print(student.tell())   # 4. 調用tell() → "大炮說:你好"
print(student.stats)    # 5. 訪問類屬性 → "大學"
print(student.credit)   # 6. 訪問實例屬性 → 10# ====== 教師部分 ======
teacher = Teachers("富貴", 55, "男", 10000)# 7. 創建Teachers對象
# 8. 調用Teachers.__init__ 
# 9. 在Teachers.__init__中:
#     - super().__init__(name, age, sex, 0) → 調用Students.__init__
#     - 設置pay=10000
# 10. 類屬性stats="教師"(覆蓋父類)print(teacher.tell())   # 11. 調用重寫的tell() → "富貴說:我不好"
print(teacher.stats)    # 12. 訪問重寫的類屬性 → "教師"
print(teacher.pay)      # 13. 訪問新增屬性 → 10000
print(teacher.credit)   # 14. 訪問繼承屬性 → 0

六、常見問題解決方案(基于真實錯誤)

問題1:忘記self參數
# 錯誤:方法缺少self
def tell():  # ? 缺少selfreturn "你好"# 正確:
def tell(self):  # ?return f"{self.name}說:你好"
問題2:屬性初始化錯誤
# 錯誤:未正確賦值
self.credit  # ? 缺少賦值操作# 正確:
self.credit = credit  # ?
問題3:繼承時參數不匹配
# 錯誤:父類需要4個參數,只傳了3個
super().__init__(name, age, sex)  # ?# 正確:添加缺失參數
super().__init__(name, age, sex, 0)  # ?
問題4:混淆類屬性和實例屬性
# 錯誤:在方法中錯誤定義類屬性
def __init__(self, name):self.stats = "學院"  # ? 這是實例屬性# 正確定義類屬性:
class Students:stats = "大學"  # ? 類屬性

七、類設計最佳實踐

  1. 單一職責原則:每個類只負責一個功能領域

  2. 命名規范

    • 類名:大駝峰?UniversityPerson

    • 方法名:小寫蛇形?calculate_grade

    • 屬性名:小寫蛇形?student_id

  3. 封裝思想:隱藏內部細節,暴露必要接口

    class BankAccount:def __init__(self, balance):self.__balance = balance  # 私有屬性def deposit(self, amount):  # 公開接口if amount > 0:self.__balance += amount
  4. 使用屬性裝飾器

    class Circle:def __init__(self, radius):self.radius = radius@propertydef area(self):  # 作為屬性訪問return 3.14 * self.radius ** 2c = Circle(5)
    print(c.area)  # 78.5(不是c.area())

八、擴展練習:打造校園管理系統

# 1. 添加課程類
class Course:def __init__(self, name, credit):self.name = nameself.credit = creditself.students = []def enroll(self, student):self.students.append(student)student.credit += self.creditreturn f"{student.name}已選課《{self.name}》"# 2. 改進學生類
class Students:# ...原有代碼...def take_course(self, course):return course.enroll(self)# 3. 使用示例
math = Course("高等數學", 4)
student = Students("小明", 20, "男", 0)print(student.take_course(math))  # 小明已選課《高等數學》
print(f"小明學分:{student.credit}")  # 4
print(f"選課學生:{[s.name for s in math.students]}")  # ['小明']

九、學習路徑建議

  1. 基礎階段

    • 創建簡單類(如BookCar

    • 練習__init__和屬性定義

    • 添加基本方法

  2. 中級階段

    • 實現類繼承(如ElectricCar繼承Car

    • 使用方法重寫

    • 學習super()的使用

  3. 高級階段

    • 掌握特殊方法(__str____len__

    • 使用屬性裝飾器@property

    • 實現簡單的類關系(如學生-課程關系)

  4. 項目實踐

💡?終極建議:從你的學生/教師類出發,逐步添加:

  1. 成績管理功能

  2. 課程表系統

  3. 校園卡消費功能

  4. 數據持久化(存儲到文件)

掌握類的核心概念后,你將能夠構建更復雜、更易維護的Python程序!🚀

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

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

相關文章

網絡智能體研究綜述

網絡智能體研究綜述1.什么是網絡智能體1.1.核心特征1.2.分類方式1.2.1.按功能定位1.2.2. 按網絡結構1.2.3.按應用場景1.3.典型應用場景1.4.技術基礎1.5.發展趨勢與挑戰1.5.1.發展趨勢1.5.2.核心挑戰2.網絡智能體盤點3.阿里的WebSailor3.1.WebSailor的主要功能和技術特點3.2.技術…

git 介紹與使用教程

Git 是一個 分布式版本控制系統,每個開發者都有一個完整的本地倉庫(包含完整歷史記錄),而遠程倉庫(如 GitHub、GitLab、Gitee)是團隊共享的中央倉庫。它們的關系如下:本地倉庫(Local…

[AI風堇]基于ChatGPT3.5+科大訊飛錄音轉文字API+GPT-SOVITS的模擬情感實時語音對話項目

[AI風堇]最近利用工作日的晚間和周末時間,我完成了一個有趣的Python編程小項目。這個項目的靈感來源于上個月在B站看到的"科技怪咖"UP主分享的一個視頻,視頻中展示了一個名為"DataMagic"的自動化數據處理工具,能夠智能分…

物聯網-規則引擎的定義

構建物聯網系統中的規則引擎是一個系統性的工程,它需要處理來自海量設備的實時數據流,并根據預定義的邏輯觸發動作。以下是構建一個高效、可靠、可擴展的物聯網規則引擎的關鍵步驟和考慮因素: 核心目標 實時性: 快速處理設備事件并…

SIMATIC WinCC Unified 使用 KPI 優化流程

大家好,我是東哥說-MES基本知識 33.1 KPI組態簡介現有工廠結構表示在面向對象的組態中定義標準化 KPI 概念的起點。 可通過在工廠視圖中用作實例的工廠對象類型來映射工廠的各組件。在“性能指 標”(Performance indicators) 全局編輯器中,可定義全局操作…

機器學習-多重線性回歸和邏輯回歸

目錄 1. 多重線性回歸 1.1 多元線性回歸 1.2 向量化(矢量化) 1.3 多元線性回歸的梯度下降算法 1.4 正規方程 2. 特征縮放 2.1 特征縮放 2.2 檢查梯度下降是否收斂 2.3 學習率的選擇 2.4 特征工程 2.5 多項式回歸 3. 邏輯回歸 3.1 Motivatio…

編程思想:程序自身的模型/函數模型硬件標準如何實現

前言前面提到過寫程序的過程:根據各種需求,構建程序模型(邏輯模型),再用代碼實現.本貼關于程序自身的模型以及函數模型,以及推導硬件標準從邏輯到代碼的思路.程序自身的模型如圖應用APP接受輸入---鼠標動作,鍵盤輸入的字符等,得到結果---畫面,顯示數據等.工具包括框架和編程語言…

基于JAVA Spring Boot物理實驗考核系統設計與實現 (文檔+源碼)

目錄 一.研究目的 二.需求分析 三.數據庫設計 四.系統頁面展示 五.源碼獲取方式 一.研究目的 信息數據的處理完全依賴人工進行操作,會耗費大量的人工成本,特別是面對大量的數據信息時,傳統人工操作不僅不能對數據的出錯率進行保證&…

【國內電子數據取證廠商龍信科技】安卓鏡像提取與解析

前言隨著智能手機更新迭代越來越快,手機廠家對手機系統安全性要求也越來越嚴格。系統安全性提高對公民的隱私是一件好事,但是對于取證行業確實一個大難題,手機系統安全性的提高意味著我們能對犯罪嫌疑人手機的提取數據和恢復數據越來越少&…

Java+Ollama 本地部署 DeepSeek-R1 對話機器人:從 0 到 1 實戰指南

作為 Java 開發者,想在本地搭建一個能理解代碼、支持多輪對話的 AI 機器人?DeepSeek-R1 這款開源大模型絕對值得一試。今天就帶大家用 OllamaJava 實現本地化部署,全程實操,新手也能跟著做! 一、先搞懂:為…

Java Web項目Dump文件分析指南

目錄 1. Dump文件的類型與作用 2. 生成Dump文件的方法 3. 分析Dump文件的工具 4. 分析步驟與常見問題解決 5. 最佳實踐與預防 在Java Web項目中,dump文件是JVM(Java虛擬機)在發生崩潰、內存溢出或特定事件時生成的內存快照文件&#xff0…

Ubuntu網卡驅動無效,不能連接wifi上網

一、現象及臨時網絡準備 我的另一篇博客詳細介紹了前期準備工作: 知乎:Ubuntu網卡驅動無效,不能連接wifi上網知乎:Ubuntu網卡驅動無效,不能連接wifi上網 在此基礎上,還得給Ubuntu配好鏡像源,…

LeetCode Hot 100 二叉搜索樹中第 K 小的元素

給定一個二叉搜索樹的根節點 root ,和一個整數 k ,請你設計一個算法查找其中第 k 小的元素(從 1 開始計數)。示例 1:輸入:root [3,1,4,null,2], k 1 輸出:1示例 2:輸入&#xff1a…

5-大語言模型—理論基礎:注意力機制優化

目錄 1、稀疏注意力機制(Sparse Attention) 1.1、核心問題:傳統注意力的 “效率瓶頸” 1.2、具體稀疏策略(詳細計算邏輯) 1.2.1、局部窗口稀疏(Local Window Sparse) 1.2.2、基于內容的稀疏…

輕松學習C++:基本語法解析

基本語法解析引言基本語法變量和數據類型運算符控制結構函數示例代碼:計算圓的面積引言 C是一種功能強大的通用編程語言,由Bjarne Stroustrup于1979年創建。它在C語言的基礎上進行了擴展,支持面向對象編程、泛型編程和過程式編程。C以其高性…

Python Pandas讀取Excel表格中數據并根據時間字段篩選數據

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄Python Pandas讀取Excel表格中數據并根據時間…

CS231n-2017 Lecture3線性分類器、最優化筆記

圖片向量與標簽得分向量:上節講到,圖片可以被展開成一個向量,對于這個向量,假設它有D維,那么它就是D維空間的一個點,又假設我們的標簽集合總共有K種,我們可以定義一個K維標簽得分向量&#xff0…

windows wsl ubuntu 如何安裝 open-jdk8

安裝步驟 jdk dhd:~$ java -version Command java not found, but can be installed with: sudo apt install openjdk-11-jre-headless # version 11.0.20.11-0ubuntu1~22.04, or sudo apt install default-jre # version 2:1.11-72build2 sudo apt install op…

Javascript進程和線程通信

JavaScript 中的進程通信(IPC)和線程通信是實現高性能、高并發應用的核心技術,尤其在處理 CPU 密集型任務或跨環境數據交互時至關重要。以下從底層機制到應用場景的詳解:🧩 ??一、進程通信(Inter-Process…

堆堆堆,咕咕咕

1.找TopK問題要找到最前面的k個元素void swap(int *a,int *b) {int temp*a;*a*b;*btemp; } //向下調整最小堆 void minheapify(int arr[],int n,int index) {int left2*index1;int right2*index2;int smallestindex;if(left<n&&arr[left]<arr[smallest]) smalles…