在Python程式設計課程(Linux版)的第二部分(文章最後附有連結) 我們之前提供了一個例子來說明物件導向編程,這是一種用於高效創建程序的範式。現在我們將更詳細地探討它。
在傳統範式中,程式由一系列依序執行的指令組成; 在物件導向程式設計中,我們處理的是能夠相互溝通的實體。這些物件具有特定的功能,並且能夠操作其他物件使用的資料。
Python程式設計課程
物件導向程式設計包含四個要素:類別、實例、屬性和方法。 該類別是定義不同實例的模板。每個實例都是由該類別建立的物件。在我們的程式碼中,只有一個實例,名為 遊戲 屬於該類 井字棋。 一個類別可以擁有不同的訊息,並且能夠理解相同的訊息並執行相同的操作,即使這些訊息是完全獨立的。
屬性是與物件關聯的變量,代表實例的內部狀態。在我們的範例中,這些屬性包括不同的棋盤更新以及確定輪到誰下棋。
方法透過指定每個類別的物件能夠執行的操作類型來決定其行為。在我們的程式碼中,這些方法負責建立和更新棋盤,以及更改使用者之間的回合順序。
對程序各部分的解釋
class TaTeTi:
Ta Te Tí 是阿根廷人對井字棋的稱呼。這條指令將建立一個類,用於定義遊戲中我們將使用的物件的結構。
def __init__(self):
這是一個特殊方法,每次建立實例時都會自動運行(game = Tic-Tac-Toe())。
self.tablero = [" " for _ in range(9)]
這條指令將以九個空格元素建立棋盤。 「_」是一個變量,在程式中沒有實際用途,但由於語法要求,所以包含在內。
self.turno = "X"
這表示第一輪將輪到“X”出局。
def mostrar_tablero(self):
決定看板的顯示方式。
for i in range(0, 9, 3):
它指出棋盤將是一個 3x3 的網格。
print(self.tablero[i], "|", self.tablero[i+1], "|", self.tablero[i+2])
列印 3x3 板
print()
列印一個空白行以提高可見性。
def play(self, position):
此方法處理的是令牌的放置位置。
if self.tablero[posicion] == " ":
檢查所選儲物櫃是否已被佔用。
self.tablero[posicion] = self.turno
如果儲物櫃可用,請放入令牌。
self.cambiar_turno()
玩家輪流進行遊戲。
else:
print("Posición ocupada")
如果玩家指出某個位置已被佔據,則會進行標記。
def cambiar_turno(self):
self.turno = "O" if self.turno == "X" else "X"
用於在“X”和“0”之間切換的方法
def hay_ganador(self):
檢查是否有獲勝者的方法
combinaciones = [
(0,1,2), (3,4,5), (6,7,8),
(0,3,6), (1,4,7), (2,5,8),
(0,4,8), (2,4,6)
為了確定是否有獲勝者,需要建立一個獲勝位置清單。
for a, b, c in combinaciones:
本說明回顧了所有組合。
if self.tablero[a] == self.tablero[b] == self.tablero != " ":
確認有三個位置由大小相等的方塊組成。
return True
如果找到獲勝組合,則該方法將傳回結果。 TRUE
juego = TaTeTi()
創建遊戲實例並運行它。
while True:
它會創建一個循環,直到沒有贏家為止(或有人按錯鍵)。
juego.mostrar_tablero()
顯示更新後的儀表板
pos = int(input(f"遊戲回合 {game.turn}。選擇位置 (0-8): ")")
它要求用戶輸入位置並獲取該值。輸入函數接收文字形式的輸入,而整數函數將其轉換為數字。
juego.jugar(pos)
嘗試在指定位置進行操作。
if juego.hay_ganador():
查看是否有獲勝者。
game.show_board()
將最終結果展示在黑板上。
print("¡Ganó un jugador!")
顯示獲獎資訊。
break
打破循環。
關於類別和方法的更多內容
正如我們之前解釋的那樣, 類別的任務是定義一個物件能做什麼、它應該是什麼,以及它需要處理哪些資料。
在Python中,類別是用`class`指令定義的。例如,如果我們想建立一個作業系統資料庫,我們可以將其定義為`cno`。
class Sistemas:
請注意,類別名稱全部大寫。這並非像縮排那樣的強制要求,但有助於提高程式碼的可讀性。
現在我們要製作「模具」。
方法描述類別的物件可以執行的行為和操作。
讓我們逐行分析程序。
class Sistemas:
正如我們所看到的,該命令創建了一個類,在該類中將定義一個模板,我們將使用該模板創建物件。
def __init__(self, nombre, version, derivada):
__init__ 是 Python 內部方法,在建立實例時執行;self 是一個參數,它引用正在建立的物件。
self.nombre = nombre
在物件中建立一個名為 name 的屬性,並將其保存在 name 參數中。
self.version = version
在物件中建立版本屬性,並將其保存在版本參數中。請記住,不建議在訊息之外使用特殊字元(例如重音符號)。
self.derivada = derivada
它與另外兩個指令使用派生參數執行相同的操作。
def mostrar_info(self):
定義一個方法來顯示物件的屬性。
print(f"Nombre: {self.nombre}")
列印 name 屬性。
print(f"Versión: {self.version}")
列印版本屬性
print(f"Derivada: {self.derivada}")
列印派生屬性
sistema = Sistemas("Ubuntu", "26.04", "Debian")
建立物件並為其指派屬性。
sistema.mostrar_info()
它顯示有關物件屬性的資訊。
類別最實用的特性之一就是便於程式碼重用。我們也可以透過新增自訂屬性來建立繼承其他類別特性的類別。我們將在下一課中討論這一點。另一個我們將要介紹的主題是如何從外部文件添加實例屬性,這將大大節省我們的編碼時間。