介紹
類是 Python 中一種非常重要的概念,它是一種封裝數據以及數據相關行為的方式。比如 Python 內置的 str 類型,它通常包括了一些可以用於處理字符串的方法(如split、replace等),同時還可以存儲字符串本身。
在 Python 中,定義一個新的類比其他語言要容易得多,這得益於 Python 的面向對象特性。在這篇文章中,我們將會一步步介紹如何用 Python 創建類。
創建類
定義一個簡單的類
在 Python 中,使用 class 關鍵字定義一個類:
class MyClass:
pass
這是一個非常基本的類,它不包含任何方法或屬性,在類定義中使用 pass 表示佔位符(用於未來將要寫入的代碼)。現在我們可以使用這個類來創建新的對象。
my_obj = MyClass()
這將會創建一個新的 MyClass 對象 my_obj。
給類添加屬性
一個類可以包含屬性,這些屬性可以用於存儲對象的狀態。在 Python 中,添加一個類屬性是非常容易的:
class MyClass:
x = 0
這個 MyClass 類現在有一個屬性 x,這個屬性的默認值為 0。
給類添加方法
方法是類中的一個函數。方法可以訪問和操作其所屬類的屬性。在 Python 中添加一個方法是非常容易的:
class MyClass:
x = 0
def add_one_to_x(self):
self.x += 1
定義一個 add_one_to_x 方法,它將類屬性 x 的值加1。需要注意的是,Python 的每個方法都要用 self 參數,它表示對象本身。這個 add_one_to_x 方法就可以在 MyClass 對象上調用了:
my_obj = MyClass()
my_obj.add_one_to_x()
print(my_obj.x) # 打印 1
繼承
繼承是 Python 中的一種重要的編程概念。它指的是一個類可以從另一個類中繼承屬性和方法。在 Python 中,使用父類名稱列表來定義一個子類:
class Vehicle:
def __init__(self, speed):
self.speed = speed
def drive(self):
print('Driving...')
class Car(Vehicle):
pass
這裡定義了一個名為 Vehicle 的類,它包含了一個 __init__ 方法用於初始化類變量 speed,以及一個 drive 方法用於模擬駕駛汽車。然後我們使用 class Car(Vehicle) 定義了一個子類 Car,它從 Vehicle 類中繼承了上述方法。
現在我們可以創建 Car 對象並調用繼承來的方法:
my_car = Car(60)
print(my_car.speed) # 打印 60
my_car.drive()
封裝
類提供了一種封裝數據的方式, 編寫人員可以隱藏並限制類的一些屬性和方法,防止被意外修改或使用。Python中默認情況下沒有訪問限制,但是我們可以使用下劃線定義數據成員的訪問權限。
私有變量
對於對象的私有變量和方法,Python 採用了一種命名約定,以實現偽私有的效果。Python 將以雙下劃線(__)開頭的屬性和方法視為私有的,從而限制了其它代碼訪問它們。 如果要從外部訪問這些屬性和方法,可以使用“_類名__屬性名/方法名”這樣的方式來做(但這是不推薦的做法)。
class MySecretClass:
__password = '123456'
def greet(self):
print('Hello World!')
def get_password(self):
return self.__password
my_obj = MySecretClass()
print(my_obj.get_password()) # 打印 123456
屬性 __password 被定義成私有的,這意味着它只能從類內部訪問,不能從外部訪問。但是我們可以通過公有方法 get_password 來獲取密碼。
保護變量
與私有變量相比,受保護的變量在屬性名之前只使用一個下劃線。受保護的變量不應被從類的外部使用,但是可以被其子類使用。
class MyProtectedClass:
_password = '123456'
def greet(self):
print('Hello World!')
def get_password(self):
return self._password
class MySubClass(MyProtectedClass):
def show_password(self):
print(self._password)
my_obj = MySubClass()
print(my_obj.get_password()) # 打印 123456
my_obj.show_password() # 打印 123456
在這個例子中,使用一個受保護的變量 _password。MySubClass 子類能夠訪問父類的受保護屬性(因為它是受保護的,而不是私有的), 所以我們可以從 MySubClass 實例中訪問和修改它。
類方法和靜態方法
類方法和靜態方法是 Python 中的兩種特殊類型的方法。
類方法
類方法是從類中調用,並且被所有實例共享的方法。定義一個類方法時,需要在方法上方添加 @classmethod 裝飾器。
class MyClass:
x = 0
@classmethod
def add_one_to_x(cls):
cls.x += 1
my_obj = MyClass()
MyClass.add_one_to_x()
print(my_obj.x) # 打印 1
在這個例子中,我們使用了 @classmethod 裝飾器來定義了一個叫做 add_one_to_x 的類方法,它將類屬性 x 的值加1。注意,類方法可以像通常的方法一樣通過類或實例調用,無論是哪一種方式,都具有相同的多態性。
靜態方法
靜態方法是一種與類相關但與實例無關的方法。這些方法不會訪問任何類或實例級別的數據。使用 @staticmethod 裝飾器定義一個靜態方法。
class MyClass:
@staticmethod
def say_hello():
print("Hello, World!")
MyClass.say_hello()
在這個示例中,我們定義了一個靜態方法 say_hello(),該方法不訪問類的任何內容,也不訪問實例級別數據,因此,我們可以在類無需實例化的情況下調用它。
總結
Python 中創建類是一件非常容易的事情,並且使用面向對象編程技術的 Python 代碼通常易於閱讀和維護。在這篇文章中,我們從多個角度介紹了使用 Python 創建類,包括:定義簡單的類、類屬性、類方法、實例方法、靜態方法,繼承、封裝等基礎概念的使用。
小標題列表
定義一個簡單的類
給類添加屬性
給類添加方法
繼承
私有變量
保護變量
類方法
靜態方法
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/311092.html