Python面向對象編程Class的應用場景

面向對象編程(Object-Oriented Programming, OOP) 是一種編程範式,它使用基於對象的方式來組織代碼。Python 的面向對象編程可以使用 Class 來實現。Class 是 Python 中面向對象編程的核心,它可以實現面向對象編程中的封裝、繼承和多態等特性。

一、創建 Class

要定義一個 Class,可以使用 class 關鍵字。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

以上代碼定義了一個名為 Person 的 Class,該 Class 有兩個屬性:name 和 age。__init__ 方法是 Class 的構造函數,當創建 Class 對象時會自動調用該方法,self 參數代表對象本身。可以通過如下代碼創建一個 Person 對象:

person = Person("Jack", 30)
print(person.name)  # 輸出 Jack
print(person.age)  # 輸出 30

該代碼會創建一個名為 person 的對象,同時輸出 person 對象的 name 和 age 屬性。

二、繼承與多態

繼承是指新的 Class 可以基於現有 Class 創建。Python 支持單繼承和多重繼承。

在繼承時,新的 Class 被稱為子類(Subclass),已有 Class 被稱為父類(Superclass)。子類會自動繼承父類的屬性和方法,並且可以重寫、添加或刪除這些屬性和方法。

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade

    def study(self):
        print(self.name, "is studying in grade", self.grade)

student = Student("Tom", 18, 12)
print(student.name)  # 輸出 Tom
print(student.age)  # 輸出 18
print(student.grade)  # 輸出 12
student.study()  # 輸出 Tom is studying in grade 12

以上代碼定義了一個名為 Student 的子類,該子類繼承了 Person 父類的 name 和 age 屬性,並添加了一個 grade 屬性和 study 方法。可以通過如下代碼創建一個 Student 對象:

該代碼會創建一個名為 student 的對象,輸出 student 對象的 name、age 和 grade 屬性,同時調用 student 對象的 study 方法。

多態是指在繼承關係中,子類可以使用父類定義的方法,但是可以自己定義該方法的實現,也可以使用父類已定義的方法實現。這樣,在不同的情況下,子類可以使用自己的方法實現,父類方法的實現也可以被使用。

三、封裝

封裝是指把代碼和數據包裝在一起,以便於隱藏內部實現細節。Python 中,可以使用公開、私有和受保護的訪問修飾符來實現封裝。

公開訪問修飾符用於定義公共屬性和方法,可以通過 Class 的對象來訪問它們。

class Car:
    def __init__(self, color):
        self.color = color

    def start(self):
        print("The car is starting...")

car = Car("red")
print(car.color)  # 輸出 red
car.start()  # 輸出 The car is starting...

以上代碼定義了一個名為 Car 的 Class,該 Class 有一個公共屬性 color 和一個公共方法 start。可以通過如下代碼創建一個 Car 對象:

該代碼會創建一個名為 car 的對象,輸出 car 對象的 color 屬性,並調用 car 對象的 start 方法。

私有訪問修飾符用於定義私有屬性和方法,可以在 Class 內部訪問它們,但是無法在 Class 的外部訪問它們。

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance

    def deposit(self, amount):
        self.__balance += amount

    def withdraw(self, amount):
        if amount <= self.__balance:
            self.__balance -= amount
        else:
            print("Not enough balance")

account = BankAccount(1000)
account.deposit(500)
account.withdraw(2000)  # 不足 2000 的餘額,將輸出 Not enough balance

以上代碼定義了一個名為 BankAccount 的 Class,該 Class 有一個私有屬性 balance,以及兩個公共方法 deposit 和 withdraw。私有屬性 balance 可以通過雙下劃線加變量名的方式定義。

可以通過如下代碼創建一個 BankAccount 對象,並分別調用它的 deposit 和 withdraw 方法。由於 balance 屬性是私有的,無法在 Class 的外部直接訪問該屬性。

受保護訪問修飾符用於定義受保護的屬性和方法,可以在 Class 及其子類中訪問它們,但是無法在 Class 的外部訪問它們。

class Animal:
    def __init__(self, name, species):
        self._name = name
        self._species = species

    def _eat(self):
        print(self._name, "is eating...")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name, "Dog")
        self._breed = breed

    def bark(self):
        print(self._name, "is barking...")

dog = Dog("Charlie", "Golden Retriever")
dog.bark()  # 輸出 Charlie is barking...
dog._eat()  # 輸出 Charlie is eating...

以上代碼定義了一個名為 Animal 的 Class 和一個名為 Dog 的子類。Animal Class 有兩個受保護的屬性 _name 和 _species,以及一個受保護的方法 _eat。Dog Class 繼承了 Animal Class,並添加了一個受保護的屬性 _breed 和一個公共方法 bark。在子類中可以通過 self._name 訪問父類的受保護屬性 _name,輸出 dog 對象的 name 屬性,同時調用 dog 對象的 bark 和 _eat 方法。

原創文章,作者:HFZME,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/317428.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HFZME的頭像HFZME
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Idea新建文件夾沒有java class的解決方法

    如果你在Idea中新建了一個文件夾,卻沒有Java Class,應該如何解決呢?下面從多個方面來進行解答。 一、檢查Idea設置 首先,我們應該檢查Idea的設置是否正確。打開Id…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python for循環求1到100的積

    Python中的for循環可以方便地遍歷列表、元組、字典等數據類型。本文將以Python for循環求1到100的積為中心,從多個方面進行詳細闡述。 一、for循環語法 Pytho…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論