Day 28:類的定義和方法

DAY 28 類的定義和方法

知識點學習

1. 類的定義

在Python中,類是創建對象的模板。使用class關鍵字來定義一個類。類名通常采用首字母大寫的命名方式(PascalCase)。

# 最簡單的類定義
class MyClass:pass  # 使用pass占位符

類的定義就像是創建一個藍圖,比如要造汽車,類就是汽車的設計圖紙,而具體的汽車對象就是根據這個圖紙制造出來的實體車輛。

2. pass占位語句

pass是Python中的占位語句,當需要在語法上需要代碼塊,但暫時不想寫具體內容時使用。它什么都不做,只是為了保證語法正確。

class EmptyClass:pass  # 暫時沒有具體內容,但語法完整def empty_function():pass  # 函數體暫時為空if True:pass  # 條件語句暫時為空

3. 類的初始化方法

__init__方法是類的構造方法,當創建類的實例時會自動調用。這就像是給新生兒起名字和登記基本信息的過程。

class Person:def __init__(self, name, age):"""初始化方法,創建Person對象時自動調用self: 代表類的實例本身name, age: 傳入的參數"""self.name = name  # 實例屬性self.age = age   # 實例屬性print(f"創建了一個名叫{name}的人,年齡{age}歲")# 創建對象時,__init__方法自動執行
person1 = Person("小明", 18)  # 輸出:創建了一個名叫小明的人,年齡18歲
person2 = Person("小紅", 20)  # 輸出:創建了一個名叫小紅的人,年齡20歲

4. 類的普通方法

普通方法是定義在類中的函數,用來實現類的功能。每個方法的第一個參數必須是self,代表調用該方法的實例。

class Student:def __init__(self, name, score):self.name = nameself.score = scoredef introduce(self):"""自我介紹方法"""return f"我是{self.name},我的成績是{self.score}分"def is_pass(self):"""判斷是否及格"""return self.score >= 60def add_score(self, points):"""加分方法"""self.score += pointsprint(f"{self.name}加了{points}分,現在總分是{self.score}")# 使用示例
student = Student("李華", 75)
print(student.introduce())  # 我是李華,我的成績是75分
print(student.is_pass())    # True
student.add_score(10)       # 李華加了10分,現在總分是85

5. 類的繼承

繼承是面向對象編程的重要特性,子類可以繼承父類的屬性和方法。這就像是孩子會遺傳父母的某些特征一樣。

屬性的繼承
class Animal:def __init__(self, name, species):self.name = nameself.species = speciesself.is_alive = True  # 所有動物都是活著的class Dog(Animal):  # Dog繼承Animaldef __init__(self, name, breed):super().__init__(name, "犬類")  # 調用父類的__init__方法self.breed = breed  # 子類特有的屬性# 創建對象
dog = Dog("旺財", "金毛")
print(f"名字:{dog.name}")      # 繼承自父類的屬性
print(f"種類:{dog.species}")   # 繼承自父類的屬性
print(f"品種:{dog.breed}")     # 子類特有的屬性
print(f"是否存活:{dog.is_alive}")  # 繼承自父類的屬性
方法的繼承
class Animal:def __init__(self, name):self.name = namedef eat(self):return f"{self.name}正在吃東西"def sleep(self):return f"{self.name}正在睡覺"class Cat(Animal):def __init__(self, name, color):super().__init__(name)self.color = colordef meow(self):  # 子類特有的方法return f"{self.name}在喵喵叫"def eat(self):  # 方法重寫return f"{self.name}優雅地吃著貓糧"# 使用示例
cat = Cat("咪咪", "白色")
print(cat.eat())    # 調用重寫后的方法:咪咪優雅地吃著貓糧
print(cat.sleep())  # 調用繼承的方法:咪咪正在睡覺
print(cat.meow())   # 調用子類特有方法:咪咪在喵喵叫

作業

題目1:定義圓(Circle)類

思路分析:
需要創建一個圓類,它應該能夠存儲半徑信息,并且能夠計算面積和周長。圓的面積公式是πr2,周長公式是2πr。

import mathclass Circle:def __init__(self, radius=1):self.radius = radiusdef calculate_area(self):area = math.pi * self.radius ** 2return round(area, 2)def calculate_circumference(self):circumference = 2 * math.pi * self.radiusreturn round(circumference, 2)circle = Circle(5)
print(f"半徑:{circle.radius}")                    # 輸出:半徑:5
print(f"面積:{circle.calculate_area()}")          # 輸出:面積:78.54
print(f"周長:{circle.calculate_circumference()}")  # 輸出:周長:31.42# 測試默認值
default_circle = Circle()
print(f"默認圓的半徑:{default_circle.radius}")     # 輸出:默認圓的半徑:1
print(f"默認圓的面積:{default_circle.calculate_area()}")  # 輸出:默認圓的面積:3.14

題目2:定義長方形(Rectangle)類

思路分析:
長方形類需要存儲長和寬兩個屬性,能夠計算面積(長×寬)和周長(2×(長+寬)),還要能判斷是否為正方形(長==寬)。

class Rectangle:def __init__(self, length=1, width=1):self.length = lengthself.width = widthdef calculate_area(self):return self.length * self.widthdef calculate_perimeter(self):return 2 * (self.length + self.width)def is_square(self):return self.length == self.widthrect = Rectangle(4, 6)
print(f"長:{rect.length}, 寬:{rect.width}")      # 輸出:長:4, 寬:6
print(f"面積:{rect.calculate_area()}")           # 輸出:面積:24
print(f"周長:{rect.calculate_perimeter()}")      # 輸出:周長:20
print(f"是否為正方形:{rect.is_square()}")         # 輸出:是否為正方形:Falsesquare = Rectangle(5, 5)
print(f"是否為正方形:{square.is_square()}")       # 輸出:是否為正方形:True# 測試默認值
default_rect = Rectangle()
print(f"默認長方形:長={default_rect.length}, 寬={default_rect.width}")  # 輸出:默認長方形:長=1, 寬=1
print(f"默認長方形是否為正方形:{default_rect.is_square()}")  # 輸出:默認長方形是否為正方形:True

題目3:圖形工廠

思路分析:
工廠函數是一種設計模式,根據不同的參數創建不同類型的對象。需要創建一個函數,根據傳入的圖形類型參數來決定創建圓還是長方形對象。

def create_shape(shape_type, *args):if shape_type == "circle":# 創建圓對象,參數為半徑if len(args) == 0:return Circle()  # 使用默認半徑else:return Circle(args[0])  # 使用傳入的半徑elif shape_type == "rectangle":# 創建長方形對象,參數為長和寬if len(args) == 0:return Rectangle()  # 使用默認值elif len(args) == 1:# 如果只傳入一個參數,創建正方形return Rectangle(args[0], args[0])else:return Rectangle(args[0], args[1])  # 使用傳入的長和寬else:raise ValueError(f"不支持的圖形類型:{shape_type}")shape1 = create_shape("circle", 5)
print(f"圓的周長:{shape1.calculate_circumference()}")  # 輸出:圓的周長:31.42shape2 = create_shape("rectangle", 3, 4)
print(f"長方形是否為正方形:{shape2.is_square()}")      # 輸出:長方形是否為正方形:False# 更多測試示例
print("\n=== 更多測試示例 ===")# 創建默認圓
default_circle = create_shape("circle")
print(f"默認圓的面積:{default_circle.calculate_area()}")# 創建正方形(只傳入一個參數)
square_shape = create_shape("rectangle", 6)
print(f"正方形的面積:{square_shape.calculate_area()}")
print(f"是否為正方形:{square_shape.is_square()}")# 創建默認長方形
default_rect = create_shape("rectangle")
print(f"默認長方形的周長:{default_rect.calculate_perimeter()}")# 錯誤處理示例
try:error_shape = create_shape("triangle", 3, 4, 5)
except ValueError as e:print(f"錯誤:{e}")

完整示例代碼

import math# 圓類
class Circle:def __init__(self, radius=1):self.radius = radiusdef calculate_area(self):area = math.pi * self.radius ** 2return round(area, 2)def calculate_circumference(self):circumference = 2 * math.pi * self.radiusreturn round(circumference, 2)# 長方形類
class Rectangle:def __init__(self, length=1, width=1):self.length = lengthself.width = widthdef calculate_area(self):return self.length * self.widthdef calculate_perimeter(self):return 2 * (self.length + self.width)def is_square(self):return self.length == self.width# 圖形工廠函數
def create_shape(shape_type, *args):if shape_type == "circle":if len(args) == 0:return Circle()else:return Circle(args[0])elif shape_type == "rectangle":if len(args) == 0:return Rectangle()elif len(args) == 1:return Rectangle(args[0], args[0])else:return Rectangle(args[0], args[1])else:raise ValueError(f"不支持的圖形類型:{shape_type}")# 綜合測試
if __name__ == "__main__":print("=== DAY 28 類的定義和方法 測試 ===\n")# 測試圓類print("1. 圓類測試:")circle = Circle(5)print(f"半徑:{circle.radius}")print(f"面積:{circle.calculate_area()}")print(f"周長:{circle.calculate_circumference()}")# 測試長方形類print("\n2. 長方形類測試:")rect = Rectangle(4, 6)print(f"長:{rect.length}, 寬:{rect.width}")print(f"面積:{rect.calculate_area()}")print(f"周長:{rect.calculate_perimeter()}")print(f"是否為正方形:{rect.is_square()}")square = Rectangle(5, 5)print(f"正方形是否為正方形:{square.is_square()}")# 測試圖形工廠print("\n3. 圖形工廠測試:")shape1 = create_shape("circle", 5)print(f"工廠創建的圓的周長:{shape1.calculate_circumference()}")shape2 = create_shape("rectangle", 3, 4)print(f"工廠創建的長方形是否為正方形:{shape2.is_square()}")

@浙大疏錦行

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

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

相關文章

OSPF綜合實驗報告冊

一、實驗拓撲二、實驗要求1、R4為ISP,其上只配置IP地址;R4與其他所直連設備間均使用公有IP; 2、R3-R5、R6、R7為MGRE環境,R3為中心站點; 3、整個OSPF環境IP基于172.16.0.0/16劃分;除了R12有兩個環回&#x…

網絡層6——內部網關協議RIP、OSPF(重點)

目錄 一、基本概念 1、理想的路由算法應具備的特點 2、分層次的路由選擇協議 二、內部網關協議RIP 1、特點 2、路由交換信息 3、距離向量算法 4、壞消息傳送慢問題 5、RIP報文格式 三、內部網關協議OSPF 1、特點 2、其他特點 3、自治系統區域劃分 4、OSPF的5中分…

同品牌的系列廣告要如何保證宣傳的連貫性?

對于品牌的系列廣告而言,內容的連貫性十分重要。如果系列廣告之間缺乏內在聯系,不僅會削弱品牌形象的統一性,還可能導致用戶的認知混亂。保證宣傳內容的連貫性不是讓每則廣告完全相同,而是在變化中保持核心要素的一致性。我們該如…

深度學習:激活函數Activaton Function

一、為什么需要激活函數?神經網絡本質上是多個線性變換(矩陣乘法)疊加。如果沒有激活函數,即使疊加多層,整體仍等價于一個線性函數:這樣的網絡無法學習和擬合現實世界中復雜的非線性關系。激活函數的作用&a…

deepseek: 切分類和長函數到同名文件中

import re import sys import os import ast from tokenize import generate_tokens, COMMENT, STRING, NL, INDENT, DEDENT import iodef extract_entities(filename):"""提取類和函數到單獨文件"""with open(filename, r, encodingutf-8) as f…

新型融合肽遞送外泌體修飾可注射溫敏水凝膠用于骨再生

溫敏水凝膠因能模擬細胞外基質微環境,且具有原位注射性和形態適應性,在骨組織工程中應用廣泛。小腸黏膜下層(SIS)作為天然細胞外基質來源,富含 I 型和 III 型膠原蛋白及多種生物活性因子,其制備的水凝膠在組…

SPI接口的4種模式(根據時鐘極性和時鐘相位)

SPI(Serial Peripheral Interface) 接口根據時鐘極性(CPOL)和時鐘相位(CPHA)的不同組合,共有 4種工作模式。這些模式決定了數據采樣和傳輸的時序關系,是SPI通信中必須正確配置的關鍵…

Java:高頻面試知識分享2

HashSet 和 TreeSet 的區別?底層實現:HashSet 基于 HashMap 實現,使用哈希表存儲元素;TreeSet 基于 TreeMap,底層為紅黑樹。元素順序:HashSet 無序;TreeSet 會根據元素的自然順序或傳入的 Compa…

C語言習題講解-第九講- 常見錯誤分類等

C語言習題講解-第九講- 常見錯誤分類等1. C程序常見的錯誤分類不包含:( )2. 根據下面遞歸函數:調用函數 Fun(2) ,返回值是多少( )3. 關于遞歸的描述錯誤的是:( &#x…

A?算法(A-star algorithm)一種在路徑規劃和圖搜索中廣泛使用的啟發式搜索算法

A?A*A?算法(A-star algorithm)是一種在路徑規劃和圖搜索中廣泛使用的啟發式搜索算法,它結合了Dijkstra算法的廣度優先搜索思想和啟發式算法的效率優勢,能夠高效地找到從起點到終點的最短路徑。 1. 基本原理 A*算法的核心是通過估…

UniappDay06

1.填寫訂單-渲染基本信息 靜態結構&#xff08;分包&#xff09;封裝請求API import { http } from /utils/http import { OrderPreResult } from /types/orderexport const getmemberOrderPreAPI () > {return http<OrderPreResult>({method: GET,url: /member/orde…

論文略讀:GINGER: Grounded Information Nugget-Based Generation of Responses

SIGIR 2025用戶日益依賴對話助手&#xff08;如 ChatGPT&#xff09;來滿足多種信息需求&#xff0c;這些需求包括開放式問題、需要推理的間接回答&#xff0c;以及答案分布在多個段落中的復雜查詢RAG試圖通過在生成過程中引入檢索到的信息來解決這些問題但如何確保回應的透明性…

從內部保護你的網絡

想象一下&#xff0c;你是一家高端俱樂部的老板&#xff0c;商務貴賓們聚集在這里分享信息、放松身心。然后假設你雇傭了最頂尖的安保人員——“保鏢”——站在門口&#xff0c;確保你準確掌握所有進出的人員&#xff0c;并確保所有人的安全。不妨想象一下丹尼爾克雷格和杜安約…

Redis 中 ZipList 的級聯更新問題

ZipList 的結構ZipList 是 Redis 中用于實現 ZSet 的壓縮數據結構&#xff0c;其元素采用連續存儲方式&#xff0c;具有很高的內存緊湊性。ZipList 結構組成如下&#xff1a;zlbytes&#xff1a;4字節&#xff0c;記錄整個ziplist的字節數zltail&#xff1a;4字節&#xff0c;記…

【蒼穹外賣項目】Day05

&#x1f4d8;博客主頁&#xff1a;程序員葵安 &#x1faf6;感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb; 一、Redis入門 Redis簡介 Redis是一個基于內存的 key-value 結構數據庫 基于內存存儲&#xff0c;讀寫性能高適合存儲熱點數據&#xff08;熱…

語音識別dolphin 學習筆記

目錄 Dolphin簡介 Dolphin 中共有 4 個模型&#xff0c;其中 2 個現在可用。 使用demo Dolphin簡介 Dolphin 是由 Dataocean AI 和清華大學合作開發的多語言、多任務語音識別模型。它支持東亞、南亞、東南亞和中東的 40 種東方語言&#xff0c;同時支持 22 種漢語方言。該模…

視頻生成中如何選擇GPU或NPU?

在視頻生成中選擇GPU還是NPU&#xff0c;核心是根據場景需求、技術約束和成本目標來匹配兩者的特性。以下是具體的決策框架和場景化建議&#xff1a; 核心決策依據&#xff1a;先明確你的“視頻生成需求” 選擇前需回答3個關鍵問題&#xff1a; 生成目標&#xff1a;視頻分辨率…

從豆瓣小組到深度洞察:一個基于Python的輿情分析爬蟲實踐

文章目錄 從豆瓣小組到深度洞察:一個基于Python的輿情分析爬蟲實踐 摘要 1. 背景 2. 需求分析 3. 技術選型與實現 3.1 總體架構 3.2 核心代碼解析 4. 難點分析與解決方案 5. 總結與展望 對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學:https://blog.csdn.net/weixin_…

RustDesk 使用教程

說明&#xff1a; 使用RustDesk 需要在不同的電腦安裝對應系統型號的客戶端&#xff0c;然后再去云服務器安裝一個服務端即可。 1、到網站下載客戶端&#xff1a;https://rustdesk.com/zh-cn/ 兩臺電腦安裝客戶端。 2、在云服務器安裝服務端 1&#xff09;官網教程&#xff1a;…

【C語言網絡編程基礎】TCP 服務器詳解

在網絡通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種可靠、面向連接的協議。一個 TCP 服務器正是基于這種協議&#xff0c;為客戶端提供穩定的網絡服務。本文將詳細介紹 TCP 服務器的基本原理和工作流程。 一、什…