Python基本語法總結

1.類(Class)

在Python中類(Class)是面向對象編程(OOP)的核心概念。

1.1.類的基本定義

  • 最簡單的類
class Cat:"""這是一個最簡單的類"""pass
#創建實例
obj = Cat()
  • 包含方法的類
class Cat:"""這是一個最簡單的類"""def bark(self):return "miao"def eat(self, food):return f"吃{food}"
#創建實例
obj = Cat()

1.2.構造方法__init__()

class Person:def __init__(self, name, age):"""構造方法,初始化示例屬性"""self.name = nameself.age = ageself.is_adult = age >= 18def introduce(self):return f"我叫{self.name}, 今年{self.age}歲"#創建實例
person = Person("張三", 25)
print(person.introduce())

1.3.類屬性和實例屬性

class Car:#類屬性wheels = 4country = "中國"def __init__(self, brand, color):#實例屬性self.brand = brandself.color = colordef info(self):return  f"{self.color}的{self.brand},有{self.wheels}個輪子"car = Car("豐田", "黑色")
print(car.info())

1.4.繼承

類的繼承可以包括單集成多集成,類定義后面括弧里面添加集成的父類

  • 單繼承
class Animal:def __init__(self, name):self.name = namedef speak(self):return "動物叫"class Dog(Animal):def __init__(self, name, breed):super().__init__(name)self.breed = breeddef speak(self):return "旺旺"def fetch(self):return f"{self.name}在接飛盤"#使用
dog = Dog("小黑", "拉布拉多")
print(dog.speak())
print(dog.fetch())
print(dog.name)
  • 多繼承
class Flyable:def fly(self):return "我能飛"class Swimmable:def swim(self):return "我能游泳"class Duck(Flyable, Swimmable):  # 多繼承def __init__(self, name):self.name = namedef quack(self):return "嘎嘎!"# 使用
duck = Duck("唐老鴨")
print(duck.quack())  # 輸出: 嘎嘎!
print(duck.fly())  # 輸出: 我能飛
print(duck.swim())  # 輸出: 我能游泳

1.5.封裝-訪問控制

使用命名約定

class BankAccount:def __init__(self, owner, balance=0):self.owner = owner       # 公開屬性self._balance = balance  # 受保護屬性(約定)self.__password = "123456"  # 私有屬性(名稱修飾)def deposit(self, amount):"""存款"""if amount > 0:self._balance += amountreturn Truereturn Falsedef withdraw(self, amount):"""取款"""if 0 < amount <= self._balance:self._balance -= amountreturn Truereturn Falsedef get_balance(self):"""獲取余額(公開方法)"""return self._balancedef _internal_method(self):"""受保護方法"""return "內部方法"def __private_method(self):"""私有方法"""return "私有方法"# 使用
account = BankAccount("張三", 1000)
print(account.owner)        # 輸出: 張三
print(account.get_balance()) # 輸出: 1000# 仍然可以訪問(但不應該)
print(account._balance)     # 輸出: 1000
# print(account.__password)  # 錯誤:AttributeError

1.6類方法和靜態方法

class MathUtils:# 類屬性PI = 3.14159@classmethoddef circle_area(cls, radius):"""類方法:計算圓面積"""return cls.PI * radius ** 2@staticmethoddef add(a, b):"""靜態方法:加法"""return a + bdef instance_method(self):"""實例方法"""return "實例方法"# 使用
print(MathUtils.circle_area(5))  # 輸出: 78.53975
print(MathUtils.add(3, 4))       # 輸出: 7# 也可以通過實例調用
utils = MathUtils()
print(utils.circle_area(3))      # 輸出: 28.27431

1.7使用示例

class Student:def __init__(self, name, student_id):self.name = nameself.student_id = student_idself.courses = {}  # 課程字典 {課程名: 成績}self.gpa = 0.0def enroll_course(self, course_name):"""選課"""if course_name not in self.courses:self.courses[course_name] = Nonereturn Truereturn Falsedef update_grade(self, course_name, grade):"""更新成績"""if course_name in self.courses and 0 <= grade <= 100:self.courses[course_name] = gradeself._calculate_gpa()return Truereturn Falsedef _calculate_gpa(self):"""計算GPA(私有方法)"""valid_grades = [g for g in self.courses.values() if g is not None]if valid_grades:self.gpa = sum(valid_grades) / len(valid_grades)def get_info(self):"""獲取學生信息"""return {'name': self.name,'student_id': self.student_id,'courses': self.courses.copy(),'gpa': self.gpa}def __str__(self):return f"學生{self.name}(學號:{self.student_id})"class StudentManager:def __init__(self):self.students = {}def add_student(self, name, student_id):"""添加學生"""if student_id not in self.students:self.students[student_id] = Student(name, student_id)return Truereturn Falsedef get_student(self, student_id):"""獲取學生"""return self.students.get(student_id)def remove_student(self, student_id):"""刪除學生"""if student_id in self.students:del self.students[student_id]return Truereturn False# 使用示例
manager = StudentManager()
manager.add_student("張三", "2023001")
manager.add_student("李四", "2023002")student = manager.get_student("2023001")
student.enroll_course("數學")
student.enroll_course("英語")
student.update_grade("數學", 85)
student.update_grade("英語", 92)print(student.get_info())

1.8抽象基類

from abc import ABC, abstractmethodclass Shape(ABC):  # 抽象基類@abstractmethoddef area(self):"""計算面積"""pass@abstractmethoddef perimeter(self):"""計算周長"""passclass Rectangle(Shape):def __init__(self, width, height):self.width = widthself.height = heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width + self.height)# 使用
rect = Rectangle(5, 3)
print(f"面積: {rect.area()}")       # 輸出: 面積: 15
print(f"周長: {rect.perimeter()}")  # 輸出: 周長: 16# shape = Shape()  # 錯誤:不能實例化抽象類

2.方法(Method)

2.1.方法類型

方法的類型分為示例方法、類方法、靜態方法

  • 實例方法
class Calculator:def add(self, a, b):  # self是必須的第一個參數"""實例方法:加法"""return a + bdef multiply(self, a, b):"""實例方法:乘法"""return a * b# 使用
calc = Calculator()
result = calc.add(5, 3)  # 輸出: 8
print(result)

通過使用注解@classmethod

  • 類方法
class MathUtils:PI = 3.14159@classmethoddef circle_area(cls, radius):  # cls代表類本身"""類方法:計算圓面積"""return cls.PI * radius ** 2@classmethoddef set_pi(cls, new_pi):"""修改類屬性"""cls.PI = new_pi# 使用
print(MathUtils.circle_area(5))  # 通過類調用: 78.53975
print(MathUtils.PI)              # 輸出: 3.14159MathUtils.set_pi(3.14)
print(MathUtils.circle_area(5))  # 輸出: 78.5
  • 靜態方法

通過使用@staticmethod

class StringUtils:@staticmethoddef reverse_string(s):"""靜態方法:反轉字符串"""return s[::-1]@staticmethoddef is_palindrome(s):"""檢查是否是回文"""return s == s[::-1]# 使用
print(StringUtils.reverse_string("hello"))  # 輸出: olleh
print(StringUtils.is_palindrome("radar"))   # 輸出: True# 也可以通過實例調用
utils = StringUtils()
print(utils.reverse_string("world"))  # 輸出: dlrow

2.2.方法參數

  • 位置參數
class User:def register(self, username, password, email):"""位置參數"""self.username = usernameself.password = passwordself.email = emailuser = User()
user.register("alice", "secret", "alice@email.com")
  • 默認參數
class User:def register(self, username, password, email, is_active=True, role="user"):"""帶默認值的參數"""self.username = usernameself.password = passwordself.email = emailself.is_active = is_activeself.role = roleuser = User()
user.register("bob", "password", "bob@email.com")  # 使用默認值
user.register("admin", "admin123", "admin@email.com", False, "admin")
  • 關鍵字參數
class Config:def set_config(self, **kwargs):"""關鍵字參數"""for key, value in kwargs.items():setattr(self, key, value)config = Config()
config.set_config(host="localhost", port=8080, debug=True)
print(config.host)  # 輸出: localhost
  • 可變位置參數
class Calculator:def sum_all(self, *args):"""可變位置參數"""return sum(args)def average(self, *args):"""計算平均值"""if not args:return 0return sum(args) / len(args)calc = Calculator()
print(calc.sum_all(1, 2, 3, 4, 5))  # 輸出: 15
print(calc.average(10, 20, 30))     # 輸出: 20.0

2.3.特殊方法

  • 構造和析構方法
class FileHandler:def __init__(self, filename):"""構造方法"""self.filename = filenameself.file = open(filename, 'r')print(f"文件 {filename} 已打開")def __del__(self):"""析構方法"""if hasattr(self, 'file') and self.file:self.file.close()print(f"文件 {self.filename} 已關閉")# 使用
handler = FileHandler("test.txt")
# 當對象被銷毀時自動調用__del__
  • 字符串表示方法
class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):"""用戶友好的字符串表示"""return f"Person: {self.name}, {self.age}歲"def __repr__(self):"""開發者的字符串表示"""return f"Person('{self.name}', {self.age})"person = Person("張三", 25)
print(str(person))    # 輸出: Person: 張三, 25歲
print(repr(person))   # 輸出: Person('張三', 25)
  • 運算符重載方法
class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):"""加法運算符重載"""return Vector(self.x + other.x, self.y + other.y)def __sub__(self, other):"""減法運算符重載"""return Vector(self.x - other.x, self.y - other.y)def __mul__(self, scalar):"""乘法運算符重載"""return Vector(self.x * scalar, self.y * scalar)def __eq__(self, other):"""相等運算符重載"""return self.x == other.x and self.y == other.yv1 = Vector(2, 3)
v2 = Vector(1, 2)
v3 = v1 + v2  # Vector(3, 5)
v4 = v1 * 2   # Vector(4, 6)
print(v3.x, v3.y)  # 輸出: 3 5
方法類型裝飾器第一個參數用途
實例方法self操作實例數據
類方法@classmethodcls操作類屬性
靜態方法@staticmethod工具函數
屬性方法@propertyself像屬性一樣訪問
抽象方法@abstractmethodself/cls定義接口

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

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

相關文章

數據結構05(Java)-- ( 歸并排序實質,歸并排序擴展問題:小和問題)

前言 本文為本小白&#x1f92f;學習數據結構的筆記&#xff0c;將以算法題為導向&#xff0c;向大家更清晰的介紹數據結構相關知識&#xff08;算法題都出自&#x1f64c;B站馬士兵教育——左老師的課程&#xff0c;講的很好&#xff0c;對于想入門刷題的人很有幫助&#x1f4…

稅務專業人員能力構建與發展路徑指南

CDA數據分析師證書含金量高&#xff0c;適應了未來數字化經濟和AI發展趨勢&#xff0c;難度不高&#xff0c;行業認可度高&#xff0c;對于找工作很有幫助。一、稅務專業人員的核心能力框架能力維度關鍵技能要素專業工具與方法論實踐輸出成果稅務法規應用稅種政策解讀、法規更新…

Linux中rsync使用與inotify實時同步配置指南

Linux中rsync使用與inotify實時同步配置指南 一、rsync 簡介 rsync&#xff08;Remote Sync&#xff09;是 Linux 系統下的一款高效數據鏡像和備份工具&#xff0c;用于在本地或遠程同步文件和目錄。 支持本地復制、基于 SSH 的遠程同步&#xff0c;以及使用自有 rsync 協議的同…

Unicode 字符串轉 UTF-8 編碼算法剖析

&#x1f4ca; Unicode 字符串轉 UTF-8 編碼算法剖析 ——從 C# char 到 C wchar_t 的編碼轉換原理 引用&#xff1a;UTF-8 編解碼可視化分析 &#x1f50d; 1. 算法功能概述 該函數將 Unicode 字符串&#xff08;C# string&#xff09;轉換為 UTF-8 編碼的字節數組&#xf…

php的安全性到底怎么樣

PHP作為一種流行的服務器端腳本語言&#xff0c;被廣泛應用于Web開發。然而&#xff0c;由于PHP是一種較為靈活的語言&#xff0c;其安全性議題一直備受爭議。在這篇文章中&#xff0c;我將從多個方面來討論PHP的安全性&#xff0c;包括常見的安全漏洞、防范措施以及最佳實踐。…

mapbox高階,結合threejs(threebox)添加建筑glb模型,添加陰影效果,設置陰影顏色和透明度

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言 1.1 ??mapboxgl.Map 地圖對象 1.2 ??mapboxgl.Map style屬性 1.3 ??threebox loadObj加載模型 二、??…

SSM從入門到實戰:1.6 Spring數據訪問與JDBC模板

&#x1f44b; 大家好&#xff0c;我是 阿問學長&#xff01;專注于分享優質開源項目解析、畢業設計項目指導支持、幼小初高的教輔資料推薦等&#xff0c;歡迎關注交流&#xff01;&#x1f680; 06-Spring數據訪問與JDBC模板 &#x1f4d6; 本文概述 本文是SSM框架系列Spri…

下一代IT服務管理:ITIL5會是什么樣?

ITIL4發布到現在也就5年多時間&#xff0c;按照以往的更新節奏&#xff0c;ITIL5最早也得2027年之后。但現在IT發展的速度&#xff0c;跟以前完全不是一個量級。AI都快把我們的飯碗搶了&#xff08;開個玩笑&#xff09;&#xff0c;ITIL要是還按部就班&#xff0c;估計真要被時…

最新研究進展:2023-2025年神經機器翻譯突破性成果

文章目錄 一、模型架構創新 1.1 混合架構的崛起 1.2 多模態翻譯的突破 1.3 大語言模型與NMT的深度融合(2023-2024) 1.4 非自回歸翻譯(NAT)的效率革命(2024) 二、數據與訓練策略優化 2.1 低資源語言翻譯的飛躍 2.2 動態數據增強技術 三、效率與部署 3.1 模型壓縮與加速 3.…

OpenTelemetry WebSocket 監控終極方案:打通最后一公里

概述 OpenTelemetry&#xff0c;以下簡稱 OTEL&#xff0c;是由 CNCF 托管的“一站式可觀測性標準”&#xff0c;把指標、鏈路、日志三大信號統一為單一 SDK/API&#xff0c;零侵入地采集從瀏覽器、移動端到后端、容器、云服務的全棧遙測數據&#xff0c;并支持 40 后端一鍵導…

VS Code 出現的 Web 視圖加載錯誤和服務工作者注冊失敗問題解決方案

針對 VS Code 或 Cursor &#xff08;vscode系&#xff09;中出現的 Web 視圖加載錯誤和服務工作者注冊失敗問題&#xff0c;以下是永久性解決方案的完整操作指南&#xff1a;解決方案步驟打開命令面板 使用快捷鍵 CtrlShiftP&#xff08;Windows/Linux&#xff09;或 CmdShift…

【qml-4】qml與c++交互(類型多例)

背景&#xff1a; 【qml-1】qml與c交互第一次嘗試&#xff08;實例注入&#xff09; 【qml-2】嘗試一個有模式的qml彈窗 【qml-3】qml與c交互第二次嘗試&#xff08;類型注冊&#xff09; 【qml-4】qml與c交互&#xff08;類型多例&#xff09; 【qml-5】qml與c交互&#…

圖數據庫如何構筑 Web3 風控防線 聚焦批量注冊與鏈上盜轉 悅數圖數據庫

隨著 Web3 生態的不斷演進&#xff0c;鏈上風險呈現出團伙化、隱蔽化和動態化的趨勢&#xff0c;傳統的單點風控手段已難以應對復雜多變的攻擊模式。尤其在批量注冊薅羊毛與鏈上交易盜轉洗錢等高頻風險場景中&#xff0c;攻擊者往往通過偽造身份、跨鏈操作、多層嵌套轉賬等方式…

恒流源電路學習

恒流源的設計原理&#xff1a; 如圖所示你可以看到右邊的的推到公式得到紅點處的電壓是一個和左邊相關的定值&#xff0c;所以呢右邊的電流就是電壓除以那個4Ω&#xff0c;所以得到右邊的電路的電流大體是一個定值&#xff0c;不管你再加什么東西都可以保持這個電流&#xff…

基于生成對抗網絡的模糊圖像恢復原理與技術實現

1. 引言圖像模糊是數字圖像處理中的常見問題&#xff0c;其成因包括相機抖動、物體運動、聚焦不良等。傳統方法如維納濾波、Lucy-Richardson 算法等依賴于模糊核估計和逆濾波&#xff0c;在復雜場景下性能有限。生成對抗網絡&#xff08;Generative Adversarial Networks, GAN&…

【Doris 系列】Doris IP 變更修復

FE 恢復 異常日志 查看 fe.out 會有以下報錯&#xff0c;此時 fe 進程是無法啟動的&#xff0c;操作前注意備份所有 fe 的元數據并停止上游讀寫動作&#xff01; java.io.IOException: the self host 192.168.31.78 does not equal to the host in ROLE file 192.168.31.81. Yo…

安卓14系統應用收不到開機廣播

安卓14系統應用收不到開機廣播 - Wesley’s Blog 前段時間有測試反饋在安卓14 上面某系統應用恢復出廠設置后沒有自啟動&#xff0c;究竟是什么原因呢&#xff1f; 回顧 Android 從3.1開始&#xff0c;會將新安裝并且從未被啟動的應用置為“STOPPED”狀態&#xff0c;或者被…

C# Attribute 方法擴展

場景 剛寫完一個干凈利落的方法&#xff0c;比如保存數據到數據庫&#xff0c;邏輯清晰、結構優雅&#xff0c; 第二天&#xff0c;“嘿&#xff0c;保存完數據&#xff0c;記得給客戶發個郵件哦~” 第三天&#xff0c;“能不能再發個消息通知其他系統&#xff1f;” 第四天&am…

【URP】[法線貼圖]為什么主要是藍色的?

【從UnityURP開始探索游戲渲染】專欄-直達 法線貼圖呈現藍紫色調&#xff08;尤其以藍色為主&#xff09;是由其?存儲原理、切線空間坐標系設計及顏色編碼規則共同決定的?。 核心原因&#xff1a;法線向量的存儲規則? ?法線向量的物理范圍? 法線是單位向量&#xff0c;…

驅動開發系列63 - NVIDIA 開源GPU驅動open-gpu-kernel-modules編譯調試

目錄 一:通過apt方式安裝nvidia 驅動 二:通過 .run 方式安裝nvidia驅動 三:編譯安裝nvidia開源內核驅動 四:驗證和調試 五:卸載驅動 1. 以apt方式安裝nvidia 驅動的卸載方法 2. 以.run方式安裝nvidia驅動的卸載方法 六:安裝CUDA環境 一:通過apt方式安裝nvidia 驅動…