Python--面向對象

面向對象??

1. 面向對象和面向過程思想

面向對象面向過程都是一種編程思想,就是解決問題的思路

  • 面向過程:POP(Procedure Oriented Programming)面向過程語言代表是c語言
  • 面向對象:OOP(Object Oriented Programming)常見的面向對象語言包括:java c++ go python koltin

通過面向對象的方式,我們不再關注具體的步驟,而是將問題抽象為對象和它們之間的交互。我們可以直接調用對象的方法來實現功能,而無需顯式指定每個步驟。

面向過程強調按照步驟執行操作,而面向對象強調通過定義和操作對象來解決問題。

在面向對象的編程中,我們將問題抽象為對象的集合,這些對象具有屬性和行為,并通過對象之間的交互來實現功能。這種抽象和交互的方式使得面向對象編程更加靈活、可維護和可擴展。

接下來我們看同一個問題,面向過程和面向對象是怎么解決的?

1.1. 面向過程編程的貪吃蛇游戲

在面向過程編程中,貪吃蛇游戲可能會以以下方式實現:

  1. 定義蛇的初始位置、長度、方向等變量。
  2. 創建一個表示游戲區域的二維數組。
  3. 在游戲循環中,根據用戶輸入改變蛇的方向。
  4. 更新蛇的位置,根據當前方向向前移動一格。
  5. 檢查蛇是否吃到食物,如果是,則增加蛇的長度。
  6. 檢查蛇是否撞到邊界或自己的身體,如果是,則游戲結束。
  7. 在游戲區域中繪制蛇和食物。
  8. 循環回到第3步,直到游戲結束。

在面向過程的編程中,游戲的各個方面被劃分為一系列的步驟和變量,通過按照特定順序執行這些步驟來控制游戲的邏輯和狀態。

1.2. 面向對象編程的貪吃蛇游戲

現在,讓我們看看如何使用面向對象編程來實現貪吃蛇游戲。

  1. 創建一個Snake類,具有屬性(例如位置、顏色、長度、方向)和方法(例如移動、吃食物)。
  2. 創建一個Food類,具有屬性(例如位置、顏色)。
  3. 創建一個Game類,它包含一個或多個蛇對象和一個或多個食物對象,以及游戲區域等屬性。Game類還具有控制游戲邏輯的方法,例如更新游戲狀態和繪制游戲界面。
  4. 在游戲循環中,通過調用Game類的方法來控制游戲的進行,例如根據用戶輸入改變蛇的方向,更新蛇的位置,檢查碰撞等。
  5. 在游戲界面中,通過調用繪圖方法來繪制蛇和食物。

在面向對象編程中,貪吃蛇游戲被視為一組對象的交互。各個對象封裝了游戲的狀態和行為,并通過對象之間的消息傳遞來實現功能。這種對【對象Object】的抽象和交互使得游戲邏輯更清晰、可維護性更高,并且可以輕松地擴展和修改游戲的功能。

一切皆對象!

1.3. 面向對象的總結

  • 面向對象,強調的是對象(實體)
  • 面向對象是一種思想,更加符合人的思維習慣
  • 面向對象使復雜的問題簡單化了
  • 面向對象的出現,讓曾經在過程的執行者,變成了對象的指揮者

2. 類和對象

類和對象是面向對象非常重要的概念

  • 類是描述了一種類型(相當于圖紙)
  • 對象是這個類型的具體實現(相當于圖紙具體實現)

思考:

旺財和狗,哪個是類,哪個是對象?

答案:

狗是一個類型,屬于類

旺財是狗的實現,屬于對象

類和對象的關系

類就是制造圖紙,只有一個。對象是類的實體,會產生多個

定義類和創建對象

類的定義格式:

class 類名:pass

創建對象

對象名 = 類名()

代碼演示:

# 定義類
class Person:pass
# 創建對象
p1 = Person()

3. 類的組成

類可以描述世間萬物,類都需要有類名,也應該具備一些屬性行為

  • 類的關鍵字:class
  • 類的名稱:類名
  • 類的屬性:一組數據
  • 類的方法:允許進行操作的方法(行為)

人(Person)類應該具備什么屬性和行為呢?

  • 屬性:姓名(name) 、年紀(age)
  • 方法:吃(eat)、跑(run)、說話(say)

3.1. 成員屬性

成員屬性的定義需要在初始化方法__init__方法下定義

格式:

def __init__(self):self.屬性 = 屬性值

舉例:

class Person:def __init__(self, name, age):# 成員屬性self.name = nameself.age = age# 創建對象
p = Person('張三', 30)
# 訪問成員屬性
print(p.name)
print(p.age)

在創建對象時,屬性值可以由外部傳進來,也可以在初始化方法里設置為任意值

3.2. 成員方法

成員方法的定義格式為 def 函數名(self):

class Person:# 定義成員方法 say_hellodef say_hello(self):print('hello')# 定義成員方法rundef run(self):print('跑')# 創建對象
p = Person()
# 調用成員方法
p.say_hello()

注意:

成員方法都會默認有參數self,調用的時候不需要傳遞self

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

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

相關文章

19c數據庫19.9以下dg切換打開hang住問題

原主庫發起切換請求,原主庫正常切換數據庫角色,但原從庫無法正常打開數據庫,嘗試關閉重啟,依舊無法解決問題。 查看切換過程中原從庫數據庫后臺日志,發現數據庫一直不斷重試清理 SRLs, 后臺alert日志&…

力扣HOT100 - 21. 合并兩個有序鏈表

解題思路&#xff1a; class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dum new ListNode(0), cur dum;while (list1 ! null && list2 ! null) {if (list1.val < list2.val) {cur.next list1;list1 list1.next;} els…

基本IO接口

引入 基本輸入接口 示例1 示例2&#xff1a;有數據保持能力的外設 #RD端由in指令控制&#xff1a;將數據由端口傳輸到CPU內存中 #CS244信號由譯碼電路實現 示例3&#xff1a; a)圖中由于輸出端口6有連接到端口1&#xff0c;當開關與端點1閉合時期間&#xff0c;仍能維持3端口…

插件:NGUI

一、版本 安裝完畢后重啟一下即可&#xff0c;否則可能創建的UI元素不生效 二、使用 Label文字 1、創建Canvs 2、只有根節點的這些腳本全部展開才能鼠標右鍵創建UI元素 3、選擇字體 Sprite圖片 1、選擇圖集 2、選擇圖集中的精靈 Panel容器 用來裝UI的容器&#xff0c;一般UI…

設計模式-策略模式-使用

設計模式-策略模式-CSDN博客 系統中有很多類&#xff0c;它們之間的區別僅在于它們的行為。策略模式可以定義一系列的算法&#xff0c;并將它們一個個封裝起來&#xff0c;使它們可以相互替換。這樣&#xff0c;算法就可以獨立于使用它的客戶而變化。需要使用算法的不同變體。…

《計算機網絡微課堂》2-5 信道的極限容量

本節課我們介紹信道極限容量的有關問題。 我們都知道信號在傳輸過程中會受到各種因素的影響&#xff0c;如圖所示&#xff0c;這是一個數字信號&#xff0c;??當它通過實際的信道后&#xff0c;波形會產生失真&#xff0c;當失真不嚴重時&#xff0c;在輸出端??還可根據以失…

Redis實現熱點數據排行榜或游戲積分排行榜

數據庫中的某張表中存儲著文章的瀏覽量&#xff0c;或者點贊數等&#xff0c;或者游戲積分等數據...... 這些數據的更新在redis中完成&#xff0c;并定時同步到mysql數據庫中。 而如果要對這些數據進行排序的話&#xff1a; Redis中的Sorted Set(有序集合)非常適合用于實現排…

vue源碼2

vue之mustache庫的機理其實是將模板字符串轉化為tokens 然后再將 tokens 轉化為 dom字符串&#xff0c;如下圖 對于一般的將模板字符串轉化為dom字符串&#xff0c;這樣不能實現復雜的功能 let data {name:小王,age:18 } let templateStr <h1>我叫{{name}},我今年{{ag…

centos7 服務開機自啟動 - systemctl -以禪道為例

在服務器上安裝的各種中間件&#xff0c;一般都需要配置成開機自啟動。但是有些中間件的安裝過程中并沒有提供相關配置開機自啟動的說明文檔。本文總結一下Centos7通過systemctl enble配置服務自啟動的方法。一、Centos7通過systemctl enble配置服務自啟動 在Centos7后&#x…

GraphSAGE

GraphSAGE 節點采樣&#xff1a;聚合&#xff08;Aggregation&#xff09;&#xff1a;更新&#xff08;update&#xff09;&#xff1a;例子&#xff1a;總結&#xff1a; 啥是GraphSAGE呢&#xff1f; 是一種用于圖嵌入的無監督學習方法。 通過采樣和聚合鄰居節點的信息來生成…

【一步一步了解Java系列】:Java中的方法對標C語言中的函數

看到這句話的時候證明&#xff1a;此刻你我都在努力~ 加油陌生人~ 個人主頁&#xff1a;Gu Gu Study 專欄&#xff1a;一步一步了解Java 喜歡的一句話&#xff1a; 常常會回顧努力的自己&#xff0c;所以要為自己的努力留下足跡。 _ 如果喜歡能否點個贊支持一下&#xff0c;謝謝…

Xfce4桌面背景和桌面圖標消失問題解決@FreeBSD

問題&#xff1a;Xfce4桌面背景和桌面圖標消失 以前碰到過好幾次桌面背景和桌面圖標消失&#xff0c;整個桌面除了上面一條和下面中間的工具條&#xff0c;其它地方全是黑色的問題&#xff0c;但是這次重啟之后也沒有修復&#xff0c;整個桌面烏黑一片&#xff0c;啥都沒有&am…

認知V2X的技術列一個學習大綱

為了深入學習和理解V2X&#xff08;Vehicle to Everything&#xff09;技術&#xff0c;以下是一個學習大綱的概述&#xff0c;結合了參考文章中的相關數字和信息&#xff1a; 一、V2X技術基礎 V2X概述 定義&#xff1a;V2X是車用無線通信技術&#xff0c;將車輛與一切事物相連…

WebService相關內容

WebService中的wsdl什么意思? WSDL(Web Services Description Language)Web服務描述語言及其功能、操作、參數和返回值的XML格式的語言。它在Java和其他編程語言中都可以使用,用于定義Web服務的接口以及如何與這些服務進行交互。 WSDL的作用 WSDL的主要作用是提供一種標準…

idea上傳git命令

git init git remote add origin git add . git commit -m "標題" git push -u origin master

Qt 模型視圖詳細介紹

一.文件系統模型&#xff08;QFileSystemModel&#xff09; 1.定義 QFileSystemModel 是 Qt 框架中的一個類&#xff0c;它提供了一個用于管理文件系統結構的模型。它可以用于顯示文件系統的目錄結構&#xff0c;以及在視圖中顯示文件和文件夾的詳細信息。 這個模型將文件系統…

15分鐘Element-UI快速入門

Element-UI 是一個基于 Vue.js 2.0 的桌面端組件庫&#xff0c;它提供了豐富的、可復用的組件&#xff0c;幫助開發者快速構建出美觀且功能強大的網頁應用。以下是一個 Element-UI 的快速入門指南&#xff1a; 1. 安裝 Element-UI 首先&#xff0c;你需要在你的 Vue.js 項目中…

各種測試方法,黑盒測試、白盒測試,靜態測試,動態測試

1.測試方法 軟件測試方法的分類有很多種&#xff0c;以測試過程中程序執行狀態為依據可分為靜態測試 (Static Testing,ST) 和動態測試 (Dynamic Testing,DT); 以具體實現算法細節和系統內部結構的相 關情況為根據可分黑盒測試、白盒測試和灰盒測試3類&#xff1b;從程序執行的方…

Python編程之調試魔法與列表逆轉之謎

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、調試魔法&#xff1a;揭開Python編程的神秘面紗 代碼調試實例 二、列表逆轉之謎&#…

實驗一:通過路由器實現內外網互聯

通過路由器實現內外網互聯 一、實驗拓撲 相關配置詳見下圖&#xff0c;內網區域為AR2以內設備&#xff0c;外網區域以AR1和PC1代替進行實驗測試。 二、實驗要求 通過路由器實現內外網互聯&#xff1a; 1.各內網PC可自動獲取ip地址&#xff1b; 2.各內網PC可ping通外網PC&…