欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解python中實(shí)例方法的第一個(gè)參數(shù)self

 更新時(shí)間:2023年09月10日 16:07:48   作者:AIHE  
在Python中,self?是類(lèi)的實(shí)例方法的一個(gè)參數(shù),代表類(lèi)的實(shí)例對(duì)象本身,在本篇文章中,我們將深入探討?self?的工作原理以及它在Python編程中的重要性,需要的可以參考下

在Python的面向?qū)ο缶幊讨校?code>self 是一個(gè)經(jīng)常遇到的術(shù)語(yǔ),但對(duì)于初學(xué)者來(lái)說(shuō),它可能會(huì)引起困惑。為什么我們需要它?它是如何工作的?在本篇文章中,我們將深入探討 self 的工作原理以及它在Python編程中的重要性。

1. 什么是self

在Python中,self 是類(lèi)的實(shí)例方法的一個(gè)參數(shù),代表類(lèi)的實(shí)例對(duì)象本身。實(shí)際上,當(dāng)我們調(diào)用一個(gè)實(shí)例的方法時(shí),Python會(huì)自動(dòng)傳遞這個(gè)實(shí)例作為第一個(gè)參數(shù),這就是 self

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model
    def display(self):
        print(f"This car is a {self.brand} {self.model}.")

在上面的例子中,display 方法使用 self 來(lái)訪問(wèn) brandmodel 屬性。

2. 為什么需要self

a. 訪問(wèn)實(shí)例屬性和方法

self 提供了一種方式,使得對(duì)象的方法可以訪問(wèn)和操作對(duì)象的屬性。在上述的 Car 類(lèi)中,我們使用 self.brandself.model 來(lái)訪問(wèn)實(shí)例的屬性。

b. 方法鏈

self 允許對(duì)象的方法返回其自身的引用,這使得我們可以鏈接方法調(diào)用。

class Calculator:
    def __init__(self, value=0):
        self.value = value
    def add(self, other_value):
        self.value += other_value
        return self
    def subtract(self, other_value):
        self.value -= other_value
        return self
calc = Calculator()
calc.add(5).subtract(3)
print(calc.value)  # Outputs: 2

3. self 不是關(guān)鍵字

雖然 self 是一個(gè)約定俗成的命名,但它不是Python的關(guān)鍵字。您可以使用任何其他名稱(chēng),但為了代碼清晰和遵循社區(qū)習(xí)慣,建議使用 self

4. 靜態(tài)方法和類(lèi)方法

不是所有的類(lèi)方法都需要 self 作為它的第一個(gè)參數(shù)。靜態(tài)方法和類(lèi)方法是兩種例外。

靜態(tài)方法:使用 @staticmethod 裝飾器定義,它們不接收任何特殊的第一個(gè)參數(shù)。

class MyClass:
    @staticmethod
    def my_static_method(arg1, arg2):
        pass

類(lèi)方法:使用 @classmethod 裝飾器定義,它們接收類(lèi)作為第一個(gè)參數(shù),通常命名為 cls。

class MyClass:
    @classmethod
    def my_class_method(cls, arg1, arg2):
        pass

靜態(tài)方法和類(lèi)方法都是與類(lèi)而非其實(shí)例關(guān)聯(lián)的方法。盡管它們?cè)谀撤N程度上相似,但它們有幾個(gè)主要的區(qū)別。以下是靜態(tài)方法和類(lèi)方法之間的主要區(qū)別:

1.定義:

  • 靜態(tài)方法 使用 @staticmethod 裝飾器定義。
  • 類(lèi)方法 使用 @classmethod 裝飾器定義。

2.參數(shù):

  • 靜態(tài)方法 不需要特定的第一個(gè)參數(shù),它們不能訪問(wèn)或修改類(lèi)的狀態(tài)或?qū)嵗臓顟B(tài)。
  • 類(lèi)方法 的第一個(gè)參數(shù)總是指向類(lèi)本身,而不是實(shí)例。這個(gè)參數(shù)通常被命名為 cls。

3.調(diào)用方式:

  • 靜態(tài)方法 可以通過(guò)類(lèi)或其實(shí)例來(lái)調(diào)用。
  • 類(lèi)方法 也可以通過(guò)類(lèi)或其實(shí)例來(lái)調(diào)用,但無(wú)論你如何調(diào)用它,它的第一個(gè)參數(shù)都是類(lèi)本身。

4.用途:

  • 靜態(tài)方法 用于在不需要訪問(wèn)類(lèi)或?qū)嵗膶傩缘那闆r下執(zhí)行某些任務(wù)。它們是真正的“靜態(tài)”的,不依賴(lài)于類(lèi)或?qū)嵗臓顟B(tài)。
  • 類(lèi)方法 主要用于需要訪問(wèn)類(lèi)屬性或修改類(lèi)的狀態(tài)的場(chǎng)景。例如,它們通常用于工廠方法,這些方法返回類(lèi)的實(shí)例。

示例:

class MyClass:
    class_var = "I'm a class variable"
    def __init__(self, value):
        self.instance_var = value
    @staticmethod
    def static_method():
        return "I'm a static method!"
    @classmethod
    def class_method(cls):
        return f"I'm a class method! Access class_var: {cls.class_var}"
# 使用
obj = MyClass("I'm an instance variable")
print(MyClass.static_method())  # 輸出: I'm a static method!
print(obj.class_method())       # 輸出: I'm a class method! Access class_var: I'm a class variable

6.修改類(lèi)/實(shí)例狀態(tài):

  • 靜態(tài)方法 不能修改類(lèi)或?qū)嵗臓顟B(tài),因?yàn)樗鼈儾荒茉L問(wèn)這些狀態(tài)。
  • 類(lèi)方法 可以修改類(lèi)的狀態(tài),但不能直接修改實(shí)例的狀態(tài)(除非你明確地傳遞了一個(gè)實(shí)例)。

總的來(lái)說(shuō),你應(yīng)該根據(jù)方法是否需要訪問(wèn)或修改類(lèi)或?qū)嵗臓顟B(tài)來(lái)決定使用靜態(tài)方法還是類(lèi)方法。如果方法不需要訪問(wèn)這些狀態(tài),那么它可能應(yīng)該是一個(gè)靜態(tài)方法。如果它需要訪問(wèn)或修改類(lèi)的狀態(tài),那么它應(yīng)該是一個(gè)類(lèi)方法。

5. self 在繼承中

當(dāng)我們使用繼承時(shí),self 在子類(lèi)中代表子類(lèi)的實(shí)例,這意味著它可以訪問(wèn)子類(lèi)和父類(lèi)中定義的屬性和方法。

class Vehicle:
    def __init__(self, brand):
        self.brand = brand
    def display(self):
        print(f"This vehicle is made by {self.brand}.")
class Bike(Vehicle):
    def __init__(self, brand, model):
        super().__init__(brand)
        self.model = model
    def display(self):
        super().display()
        print(f"It's a {self.model} bike.")

在這個(gè)例子中,Bike 類(lèi)的 display 方法首先調(diào)用父類(lèi)的 display 方法,然后再輸出自己的信息。這是通過(guò) self 實(shí)現(xiàn)的,它在父類(lèi)和子類(lèi)中都代表 Bike 的實(shí)例。

3.總結(jié)

在Python的面向?qū)ο缶幊讨校?code>self 是一個(gè)核心概念,它代表了對(duì)象的實(shí)例。通過(guò) self,對(duì)象的方法可以訪問(wèn)和修改它的屬性,調(diào)用其他方法,并支持繼承和多態(tài)。雖然它只是一個(gè)普通的參數(shù)名,但它在Python編程中有著特殊的意義,為編寫(xiě)清晰、結(jié)構(gòu)化和可維護(hù)的代碼提供了基礎(chǔ)。

到此這篇關(guān)于深入理解python中實(shí)例方法的第一個(gè)參數(shù)self的文章就介紹到這了,更多相關(guān)python self內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中如何使用insert函數(shù)

    python中如何使用insert函數(shù)

    這篇文章主要介紹了python中如何使用insert函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python 中導(dǎo)入csv數(shù)據(jù)的三種方法

    Python 中導(dǎo)入csv數(shù)據(jù)的三種方法

    這篇文章主要介紹了Python 中導(dǎo)入csv數(shù)據(jù)的三種方法,內(nèi)容比較簡(jiǎn)單,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 手把手教你用python發(fā)送短消息(基于阿里云平臺(tái))

    手把手教你用python發(fā)送短消息(基于阿里云平臺(tái))

    這篇文章主要介紹了手把手教你用python發(fā)送短消息(基于阿里云平臺(tái)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • matplotlib常見(jiàn)函數(shù)之plt.rcParams、matshow的使用(坐標(biāo)軸設(shè)置)

    matplotlib常見(jiàn)函數(shù)之plt.rcParams、matshow的使用(坐標(biāo)軸設(shè)置)

    這篇文章主要介紹了matplotlib常見(jiàn)函數(shù)之plt.rcParams、matshow的使用(坐標(biāo)軸設(shè)置),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • pytorch torch.expand和torch.repeat的區(qū)別詳解

    pytorch torch.expand和torch.repeat的區(qū)別詳解

    這篇文章主要介紹了pytorch torch.expand和torch.repeat的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 解決Keras TensorFlow 混編中 trainable=False設(shè)置無(wú)效問(wèn)題

    解決Keras TensorFlow 混編中 trainable=False設(shè)置無(wú)效問(wèn)題

    這篇文章主要介紹了解決Keras TensorFlow 混編中 trainable=False設(shè)置無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python 裝飾器深入理解

    Python 裝飾器深入理解

    這篇文章主要介紹了Python 裝飾器深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Selenium元素的常用操作方法分析

    Selenium元素的常用操作方法分析

    這篇文章主要介紹了Selenium元素的常用操作方法,結(jié)合實(shí)例形式分析Selenium在獲取元素之后針對(duì)點(diǎn)擊、輸入、提交、屬性獲取等常見(jiàn)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • Python 稀疏矩陣-sparse 存儲(chǔ)和轉(zhuǎn)換

    Python 稀疏矩陣-sparse 存儲(chǔ)和轉(zhuǎn)換

    這篇文章主要介紹了Python 稀疏矩陣-sparse 存儲(chǔ)和轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 詳解Python Celery和RabbitMQ實(shí)戰(zhàn)教程

    詳解Python Celery和RabbitMQ實(shí)戰(zhàn)教程

    這篇文章主要介紹了詳解Python Celery和RabbitMQ實(shí)戰(zhàn)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論