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

python類中的self和變量用法及說明

 更新時間:2022年11月24日 10:21:22   作者:to_qin  
這篇文章主要介紹了python類中的self和變量用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在python的類中會使用到“self”,本文主要是談?wù)勵愔械膕elf和變量的關(guān)系。

先看示例代碼I。

class Test(object):
    def __init__ (self, val1):
        self.val0 = val1
    def fun1(self):
        print(self.val0)
    def fun2(self, val2):
        print(val2)
    def fun3(self):
        print(self.fun1)
        self.fun1()

ins=Test(123)
ins.new_val=”I'm a new value”

1、self是什么

在python的類中self代表實例本身,具體來說,是該實例的內(nèi)存地址。

在調(diào)用實例的方法時,Python解釋器會自己把實例變量傳給類的函數(shù)中的self。

以上述代碼I為例

代碼I定義了一個類Test,在這個類中,self為參數(shù)變量,在類Test實例化得到實例ins時,python解釋器自動調(diào)用__init__,執(zhí)行Test.init(ins, 123),該self可接收實例ins的內(nèi)存地址,從而self代表了

實例本身。類似的,如果實例化ins后,執(zhí)行ins.fun1( ),python解釋器會將ins.fun1( )解釋成Test.fun1(ins)??梢?,self這個變量是無需用戶手動傳送值的,解釋器會自動幫我們給其傳遞實例。

需要注意的是,self不是關(guān)鍵字,換言之,可以用其它的合法變量名替換self,但是,規(guī)范和標(biāo)準(zhǔn)建議我們一致使用self。

2、self的使用場景

在類中,self的使用有下面3個場景

1)self為類中的函數(shù)的第一個參數(shù),例如在類中,def fun1(self, …)。

上文說過,“在調(diào)用實例的方法時,Python解釋器會自己把實例變量傳給類的函數(shù)中的self”,如果類的函數(shù)的第一個參數(shù)不是代表實例的self,則調(diào)用實例的方法時,該方法沒有參數(shù)接收解釋器自動傳入的實例變量,從而程序會產(chǎn)生異常。

事實上,“和普通的函數(shù)相比,在類中定義的函數(shù)只有一點不同,就是第一個參數(shù)永遠是實例變量self,并且,調(diào)用時,不用傳遞該參數(shù)。除此之外,類的方法和普通函數(shù)沒有什么區(qū)別,所以,你仍然可以用默認參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)”(廖雪峰老師說的)。

2)在類中,引用實例的屬性,示例:self.變量名(如self.val0)。

引用實例的屬性的目的是為實例綁定屬性、寫入或讀取實例的屬性。

例如,在代碼I中,在類的函數(shù)__init__中,“self.val1 = val1”將屬性val0綁定到了實例self(類實例化成ins后,self就代表實例ins了)上,并且將變量val1的值賦給了實例的屬性val0。

在函數(shù)fun1中,print(self.val0),讀取了實例self的值val0,并打印出來,當(dāng)然,在函數(shù)中修改屬性val0的值也是可以的。

3)在類中,調(diào)用實例的方法,例如,self.fun1();獲取實例的方法的地址,例如self.fun1。

類是抽象的模板,而實例是根據(jù)類創(chuàng)建出來的一個個具體的“對象”,每個對象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。既然,self代表實例,則可以“self.函數(shù)名”的方式表示實例的方法地址,以“self.函數(shù)名()”的方式,調(diào)用實例的方法。在類的定義中,以及實例化后對實例方法的調(diào)用,都可以這樣做。

3、python的幾種變量——按作用域分

1、全局變量:在模塊內(nèi)、在所有函數(shù)外面、在class外面,這就是全局變量。

2、局部變量:在函數(shù)內(nèi)、在class的方法內(nèi)(未加self修飾的) ,這就是局部變量

3、靜態(tài)變量(也可以說,類屬性):在class內(nèi)的,但不在class的方法內(nèi)的,這就是靜態(tài)變量

4、實例變量(也可以說,實例屬性):在class的方法內(nèi)的,用self修飾的變量,這就是實例變量

注意,根據(jù)其他的分類方法可以得到其他的類別,例如私有變量。

4、self和變量的關(guān)系

綜合上述的1、2和3點,可以得到在類中,self和變量的關(guān)系了,一言以蔽之,被self修飾的變量是實例變量,不被self修飾的變量不是實例變量。

實例變量有什么作用,或者說,什么時候應(yīng)該使用self修飾變量比較好?我的總結(jié)如下:

當(dāng)我們想將某個變量綁定給實例時,就在類中,使用self修飾該變量。一般來說,類實例化為不同實例后,為了不同實例的某一變量互不干擾,就將該變量綁定給實例。

具體的使用場景

1)若需要在類的不同方法中調(diào)用同一變量,且屬于同一個類的不同實例的該變量互不影響(即排除類屬性),則在類中將該變量綁定給實例。

2)需要在類實例化得到實例后,修改、或引用實例的某變量,則在類中將該變量綁定給實例。

5、一點補充

為實例綁定屬性有兩種方式

1)在類的函數(shù)__init__中,為實例綁定變量。

這也是本文討論的場景。

根據(jù)pep8,所有的加了self的變量,需要確保是在__init__中首次出現(xiàn),雖然不這樣做有些場景下程序也不會出錯,但按照規(guī)定來吧。

2)在實例化后,為實例綁定新的屬性。例如,實例變量.屬性變量=值

由于Python是動態(tài)語言,從而,根據(jù)類創(chuàng)建的實例可以任意綁定屬性。通過實例變量給實例綁定屬性是方法之一,例如代碼I中的,ins.newval=”I’m a new value”,為實例綁定了屬性newval。不過,這不是本文討論的關(guān)注點。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python基于滑動平均思想實現(xiàn)缺失數(shù)據(jù)填充的方法

    Python基于滑動平均思想實現(xiàn)缺失數(shù)據(jù)填充的方法

    今天小編就為大家分享一篇關(guān)于Python基于滑動平均思想實現(xiàn)缺失數(shù)據(jù)填充的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python 使用遞歸實現(xiàn)打印一個數(shù)字的每一位示例

    python 使用遞歸實現(xiàn)打印一個數(shù)字的每一位示例

    今天小編就為大家分享一篇python 使用遞歸實現(xiàn)打印一個數(shù)字的每一位示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 基于Python實現(xiàn)24點游戲的示例代碼

    基于Python實現(xiàn)24點游戲的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)24點游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-12-12
  • python函數(shù)遞歸與調(diào)用示例詳解

    python函數(shù)遞歸與調(diào)用示例詳解

    這篇文章主要為大家介紹了python函數(shù)遞歸與調(diào)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Python實現(xiàn)爬取馬云的微博功能示例

    Python實現(xiàn)爬取馬云的微博功能示例

    這篇文章主要介紹了Python實現(xiàn)爬取馬云的微博功能,結(jié)合實例形式較為詳細的分析了Python模擬ajax請求爬取馬云微博的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-02-02
  • 打包python 加icon 去掉cmd黑窗口方法

    打包python 加icon 去掉cmd黑窗口方法

    今天小編就為大家分享一篇打包python 加icon 去掉cmd黑窗口方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 學(xué)習(xí)python可以干什么

    學(xué)習(xí)python可以干什么

    在本文里我們給大家分享了關(guān)于學(xué)習(xí)python的前途以及告訴大家可以做什么,正在學(xué)習(xí)PYTHON的朋友們學(xué)習(xí)下。
    2019-02-02
  • Python加載數(shù)據(jù)的5種不同方式(收藏)

    Python加載數(shù)據(jù)的5種不同方式(收藏)

    這篇文章主要介紹了Python加載數(shù)據(jù)的5種不同方式(收藏),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 淺談Python中range與Numpy中arange的比較

    淺談Python中range與Numpy中arange的比較

    這篇文章主要介紹了淺談Python中range與Numpy中arange的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • flask框架視圖函數(shù)用法示例

    flask框架視圖函數(shù)用法示例

    這篇文章主要介紹了flask框架視圖函數(shù)用法,結(jié)合實例形式分析了flask框架視圖函數(shù)常見配置與使用技巧,需要的朋友可以參考下
    2018-07-07

最新評論