最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python類中方法種類與修飾符從基礎(chǔ)到實(shí)戰(zhàn)詳解

 更新時(shí)間:2025年07月21日 08:40:05   作者:盛夏綻放  
在Python面向?qū)ο缶幊讨?方法有不同的種類和修飾符,它們各自有著特定的用途和行為,本文將全面解析Python中的各種方法類型,并通過一個(gè)綜合案例幫助你徹底掌握這些概念,需要的朋友可以參考下

一、方法類型總覽

Python中的方法主要分為以下幾種:

方法分類:
  ┌───────────────┐
  │  實(shí)例方法     │ ← 操作實(shí)例屬性,第一個(gè)參數(shù)self
  ├───────────────┤
  │  類方法       │ ← 操作類屬性,@classmethod裝飾,第一個(gè)參數(shù)cls
  ├───────────────┤
  │  靜態(tài)方法     │ ← 不操作類或?qū)嵗龑傩?,@staticmethod裝飾
  ├───────────────┤
  │  抽象方法     │ ← 必須由子類實(shí)現(xiàn),@abstractmethod裝飾
  ├───────────────┤
  │  魔術(shù)方法     │ ← 雙下劃線開頭結(jié)尾,如__init__
  └───────────────┘

二、各類方法詳解

1. 實(shí)例方法 (Instance Method)

特點(diǎn)

  • 默認(rèn)類型的方法
  • 第一個(gè)參數(shù)必須是self,指向?qū)嵗旧?/li>
  • 可以訪問和修改實(shí)例屬性
  • 可以訪問類屬性
class MyClass:
    class_attr = "類屬性"
    
    def __init__(self, value):
        self.instance_attr = value  # 實(shí)例屬性
    
    def instance_method(self):
        return f"實(shí)例屬性: {self.instance_attr}, 類屬性: {self.class_attr}"

obj = MyClass("實(shí)例值")
print(obj.instance_method())  # 實(shí)例屬性: 實(shí)例值, 類屬性: 類屬性

2. 類方法 (Class Method)

特點(diǎn)

  • 使用@classmethod裝飾器
  • 第一個(gè)參數(shù)必須是cls,指向類本身
  • 可以訪問和修改類屬性
  • 不能訪問實(shí)例屬性
  • 常用于創(chuàng)建工廠方法
class Pizza:
    base_price = 10  # 基礎(chǔ)價(jià)格
    
    def __init__(self, toppings):
        self.toppings = toppings
    
    @classmethod
    def margherita(cls):
        return cls(["番茄", "芝士"])  # 創(chuàng)建特定類型的披薩
    
    @classmethod
    def pepperoni(cls):
        return cls(["番茄", "芝士", "意大利辣香腸"])
    
    @classmethod
    def update_base_price(cls, new_price):
        cls.base_price = new_price  # 修改類屬性

# 使用類方法創(chuàng)建對(duì)象
margherita = Pizza.margherita()
pepperoni = Pizza.pepperoni()

print(margherita.toppings)  # ['番茄', '芝士']
print(pepperoni.toppings)   # ['番茄', '芝士', '意大利辣香腸']

# 修改類屬性
Pizza.update_base_price(12)
print(Pizza.base_price)  # 12

3. 靜態(tài)方法 (Static Method)

特點(diǎn)

  • 使用@staticmethod裝飾器
  • 不需要selfcls參數(shù)
  • 不能訪問類或?qū)嵗龑傩?/li>
  • 與普通函數(shù)類似,但邏輯上屬于類
  • 常用于工具函數(shù)
class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b
    
    @staticmethod
    def circle_area(radius):
        return 3.14159 * radius ** 2

# 使用靜態(tài)方法
print(MathUtils.add(5, 3))         # 8
print(MathUtils.circle_area(2))    # 12.56636

# 也可以通過實(shí)例調(diào)用
utils = MathUtils()
print(utils.add(10, 20))          # 30

4. 抽象方法 (Abstract Method)

特點(diǎn)

  • 使用@abstractmethod裝飾器
  • 必須從abc.ABC繼承
  • 只定義接口不實(shí)現(xiàn),子類必須實(shí)現(xiàn)
  • 用于定義抽象基類(ABC)
from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass
    
    @abstractmethod
    def move(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "汪汪!"
    
    def move(self):
        return "跑動(dòng)"

# animal = Animal()  # 報(bào)錯(cuò),不能實(shí)例化抽象類
dog = Dog()
print(dog.make_sound())  # 汪汪!
print(dog.move())        # 跑動(dòng)

5. 魔術(shù)方法 (Magic Method)

特點(diǎn)

  • 雙下劃線開頭和結(jié)尾(__method__)
  • Python自動(dòng)調(diào)用,用于實(shí)現(xiàn)特殊行為
  • __init__(初始化)、__str__(字符串表示)等
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        """向量加法"""
        return Vector(self.x + other.x, self.y + other.y)
    
    def __str__(self):
        return f"Vector({self.x}, {self.y})"
    
    def __len__(self):
        """返回向量長(zhǎng)度(歐幾里得距離)"""
        return int((self.x**2 + self.y**2)**0.5)

v1 = Vector(3, 4)
v2 = Vector(5, 6)
v3 = v1 + v2  # 調(diào)用__add__

print(v3)      # Vector(8, 10) (調(diào)用__str__)
print(len(v1)) # 5 (調(diào)用__len__)

三、方法修飾符對(duì)比表

特性實(shí)例方法類方法靜態(tài)方法抽象方法
裝飾器@classmethod@staticmethod@abstractmethod
第一個(gè)參數(shù)self(實(shí)例)cls(類)self或cls
訪問實(shí)例屬性可以不可以不可以可以(需子類實(shí)現(xiàn))
訪問類屬性可以可以不可以可以(需子類實(shí)現(xiàn))
調(diào)用方式對(duì)象.方法()類.方法()或?qū)ο?方法()類.方法()或?qū)ο?方法()子類必須實(shí)現(xiàn)
主要用途操作實(shí)例狀態(tài)操作類狀態(tài)或工廠方法工具函數(shù)定義接口規(guī)范

四、綜合案例:電商商品系統(tǒng)

讓我們通過一個(gè)電商商品系統(tǒng)的案例來綜合運(yùn)用各種方法類型:

from abc import ABC, abstractmethod
from datetime import datetime

class Product(ABC):
    """商品抽象基類"""
    tax_rate = 0.1  # 類屬性: 稅率
    
    def __init__(self, name, price, quantity):
        self.name = name
        self.price = price
        self.quantity = quantity
        self.__id = self.__generate_id()  # 私有屬性
    
    def __generate_id(self):
        """私有方法: 生成商品ID"""
        timestamp = int(datetime.now().timestamp())
        return f"PROD-{timestamp}"
    
    @property
    def id(self):
        """只讀屬性: 商品ID"""
        return self.__id
    
    @abstractmethod
    def display_info(self):
        """抽象方法: 顯示商品信息"""
        pass
    
    @classmethod
    def update_tax_rate(cls, new_rate):
        """類方法: 更新稅率"""
        cls.tax_rate = new_rate
    
    @staticmethod
    def calculate_discount(price, discount):
        """靜態(tài)方法: 計(jì)算折扣價(jià)"""
        return price * (1 - discount)
    
    def sell(self, quantity):
        """實(shí)例方法: 銷售商品"""
        if quantity <= self.quantity:
            self.quantity -= quantity
            total = quantity * self.price * (1 + self.tax_rate)
            return f"已售出 {quantity} 件 {self.name}, 總價(jià): {total:.2f}"
        return "庫(kù)存不足"

class Book(Product):
    """具體商品類: 圖書"""
    def __init__(self, name, price, quantity, author):
        super().__init__(name, price, quantity)
        self.author = author
    
    def display_info(self):
        """實(shí)現(xiàn)抽象方法"""
        return (f"圖書: {self.name}\n"
                f"作者: {self.author}\n"
                f"價(jià)格: ¥{self.price:.2f}\n"
                f"庫(kù)存: {self.quantity}件\n"
                f"含稅價(jià): ¥{self.price * (1 + self.tax_rate):.2f}")

class Electronics(Product):
    """具體商品類: 電子產(chǎn)品"""
    def __init__(self, name, price, quantity, warranty):
        super().__init__(name, price, quantity)
        self.warranty = warranty  # 保修期(月)
    
    def display_info(self):
        """實(shí)現(xiàn)抽象方法"""
        return (f"電子產(chǎn)品: {self.name}\n"
                f"保修: {self.warranty}個(gè)月\n"
                f"價(jià)格: ¥{self.price:.2f}\n"
                f"庫(kù)存: {self.quantity}件\n"
                f"含稅價(jià): ¥{self.price * (1 + self.tax_rate):.2f}")

# 使用示例
if __name__ == "__main__":
    # 修改稅率(類方法)
    Product.update_tax_rate(0.15)
    
    # 創(chuàng)建商品
    book = Book("Python編程", 59.99, 100, "John Doe")
    phone = Electronics("智能手機(jī)", 2999.99, 50, 24)
    
    # 顯示商品信息(實(shí)例方法)
    print(book.display_info())
    print("\n" + phone.display_info())
    
    # 銷售商品(實(shí)例方法)
    print("\n" + book.sell(2))
    print(phone.sell(1))
    
    # 計(jì)算折扣(靜態(tài)方法)
    discounted_price = Product.calculate_discount(phone.price, 0.2)
    print(f"\n手機(jī)8折價(jià): ¥{discounted_price:.2f}")
    
    # 訪問私有屬性(通過property)
    print(f"\n圖書ID: {book.id}")
    # print(book.__id)  # 報(bào)錯(cuò),無法直接訪問私有屬性

五、最佳實(shí)踐建議

合理使用方法類型

  • 需要訪問實(shí)例狀態(tài) → 實(shí)例方法
  • 需要操作類狀態(tài) → 類方法
  • 獨(dú)立工具函數(shù) → 靜態(tài)方法
  • 定義接口規(guī)范 → 抽象方法

命名約定

  • 普通方法:小寫加下劃線 calculate_total
  • 私有方法:雙下劃線開頭 __internal_logic
  • 魔術(shù)方法:雙下劃線開頭和結(jié)尾 __str__

封裝原則

  • 將不需要外部訪問的方法設(shè)為私有
  • 使用property控制屬性訪問
  • 通過方法暴露必要功能而非直接訪問屬性

文檔說明

  • 使用docstring說明方法用途和參數(shù)
  • 明確哪些方法是公開API,哪些是內(nèi)部實(shí)現(xiàn)

通過本文的學(xué)習(xí)和案例實(shí)踐,你應(yīng)該已經(jīng)掌握了Python中各種方法類型的特點(diǎn)和使用場(chǎng)景。記住,選擇合適的方法類型可以使你的代碼更加清晰、可維護(hù)和符合Python風(fēng)格。

以上就是Python類中方法種類與修飾符詳解的詳細(xì)內(nèi)容,更多關(guān)于Python方法種類與修飾符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談keras 的抽象后端(from keras import backend as K)

    淺談keras 的抽象后端(from keras import backend as K)

    這篇文章主要介紹了淺談keras 的抽象后端(from keras import backend as K),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python字符串切割:str.split()與re.split()的對(duì)比分析

    python字符串切割:str.split()與re.split()的對(duì)比分析

    今天小編就為大家分享一篇python字符串切割:str.split()與re.split()的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python項(xiàng)目下生成requirements.txt方法

    python項(xiàng)目下生成requirements.txt方法

    這篇文章主要介紹了python項(xiàng)目下生成requirements.txt的方法,很多小伙伴不知道如何生成requirements.txt,本文就通過代碼示例給大家詳細(xì)介紹如何生成,,需要的朋友可以參考下
    2023-06-06
  • Mac M1芯片適配Miniconda的最新解決方案小結(jié)

    Mac M1芯片適配Miniconda的最新解決方案小結(jié)

    本文介紹如何在M1/M2 Mac上使用Miniconda搭建原生AI開發(fā)環(huán)境,涵蓋Conda安裝、arm64環(huán)境配置、TensorFlow與PyTorch的GPU加速設(shè)置,以及環(huán)境隔離和復(fù)現(xiàn)方法,幫助開發(fā)者高效運(yùn)行機(jī)器學(xué)習(xí)項(xiàng)目,感興趣的可以了解一下
    2026-04-04
  • python基于concurrent模塊實(shí)現(xiàn)多線程

    python基于concurrent模塊實(shí)現(xiàn)多線程

    這篇文章主要介紹了python基于concurrent模塊實(shí)現(xiàn)多線程,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Django中的函數(shù)視圖和類視圖以及路由的定義方式

    Django中的函數(shù)視圖和類視圖以及路由的定義方式

    Django視圖分函數(shù)視圖和類視圖,前者用函數(shù)處理請(qǐng)求,后者繼承View類定義方法,路由使用path()、re_path()或url(),通過include()整合子應(yīng)用路由,需注意請(qǐng)求方式判斷及裝飾器限制
    2025-08-08
  • Python ATM功能實(shí)現(xiàn)代碼實(shí)例

    Python ATM功能實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Python ATM功能實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 基于python判斷目錄或者文件代碼實(shí)例

    基于python判斷目錄或者文件代碼實(shí)例

    這篇文章主要介紹了基于python判斷目錄或者文件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python使用ElementTree美化XML格式的操作

    Python使用ElementTree美化XML格式的操作

    這篇文章主要介紹了Python使用ElementTree美化XML格式的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python中的四種交換數(shù)值的方法解析

    Python中的四種交換數(shù)值的方法解析

    這篇文章主要介紹了Python中的四種交換數(shù)值的方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

梨树县| 华坪县| 珲春市| 灌南县| 临江市| 郁南县| 墨脱县| 两当县| 玉环县| 喜德县| 丰台区| 宜州市| 宁河县| 石首市| 钟祥市| 雷州市| 昭觉县| 博罗县| 武安市| 马关县| 清镇市| 双鸭山市| 修水县| 成都市| 四会市| 阿拉善左旗| 长汀县| 霞浦县| 济源市| 乐山市| 赤城县| 永修县| 班戈县| 雷州市| 大洼县| 兰考县| 西畴县| 昭苏县| 江安县| 镇平县| 北碚区|