小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python self用法詳解

 碼農(nóng)9527 2021-09-14

    在定義類的過程中,無論是顯式創(chuàng)建類的構造方法,還是向類中添加實例方法,都要求將self參數(shù)作為方法的第一個參數(shù)。例如,定義一個Person類:

class Person:
 def __init__(self):
  print("正在執(zhí)行構造方法") # 定義一個study()實例方法
 def study(self,name):
  print(name,"正在學Python")123456復制代碼類型:[python]

    那么,self到底扮演著什么樣的角色呢?本節(jié)就對self參數(shù)做詳細的介紹。

    事實上,Python只是規(guī)定,無論是構造方法還是實例方法,最少要包含一個參數(shù),并沒有規(guī)定該參數(shù)的具體名稱。之所以將其命名為self,只是程序員之間約定俗成的一種習慣,遵守這個約定,可以使我們編寫的代碼具有更好的可讀性(大家一看到self,就知道它的作用)。

    那么,self參數(shù)的具體作用是什么呢?打個比方,如果把類比作造房子的圖紙,那么類實例化后的對象是真正可以住的房子。根據(jù)一張圖紙(類),我們可以設計出成千上萬的房子(類對象),每個房子長相都是類似的(都有相同的類變量和類方法),但它們都有各自的主人,那么如何對它們進行區(qū)分呢?

    當然是通過self參數(shù),它就相當于每個房子的門鑰匙,可以保證每個房子的主人僅能進入自己的房子(每個類對象只能調用自己的類變量和類方法)。

    如果你接觸過其他面向對象的編程語言(例如C++),其實Python類方法中的self參數(shù)就相當于C++中的this指針。

    也就是說,同一個類可以產(chǎn)生多個對象,當某個對象調用類方法時,該對象會把自身的引用作為第一個參數(shù)自動傳給該方法,換句話說,Python會自動綁定類方法的第一個參數(shù)指向調用該方法的對象。如此,Python解釋器就能知道到底要操作哪個對象的方法了。

    因此,程序在調用實例方法和構造方法時,不需要手動為第一個參數(shù)傳值。例如,更改前面的Person類,如下所示: 

class Person:
 def __init__(self):
  print("正在執(zhí)行構造方法") # 定義一個study()實例方法
 def study(self):
  print(self,"正在學Python")
zhangsan = Person()
zhangsan.study()
lisi = Person()
lisi.study()1234567891011復制代碼類型:[python]

    上面代碼中,study()中的self代表該方法的調用者,即誰調用該方法,那么self就代表誰。因此,該程序的運行結果為:

正在執(zhí)行構造方法
<__main__.Person object at 0x0000021ADD7D21D0> 正在學Python
正在執(zhí)行構造方法
<__main__.Person object at 0x0000021ADD7D2E48> 正在學Python1234復制代碼類型:[python]

    另外,對于構造函數(shù)中的self參數(shù),其代表的是當前正在初始化的類對象。舉個例子:

class Person:
 name = "xxx"
 def __init__(self,name):
  self.name=name
zhangsan = Person("zhangsan")
print(zhangsan.name)
lisi = Person("lisi")
print(lisi.name)12345678復制代碼類型:[python]

    運行結果為:

zhangsan
lisi12復制代碼類型:[python]

    可以看到,zhangsan在進行初始化時,調用的構造函數(shù)中self代表的是zhangsan;而lisi在進行初始化時,調用的構造函數(shù)中self代表的是lisi。

    值得一提的是,除了類對象可以直接調用類方法,還有一種函數(shù)調用的方式,例如: 

class Person:
 def who(self):
  print(self)
zhangsan = Person()#第一種方式zhangsan.who()#第二種方式who = zhangsan.who
who()#通過 who 變量調用zhangsan對象中的 who() 方法123456789復制代碼類型:[python]

    運行結果為:

<__main__.Person object at 0x0000025C26F021D0>
<__main__.Person object at 0x0000025C26F021D0>12復制代碼類型:[python]

    顯然,無論采用哪種方法,self所表示的都是實際調用該方法的對象。

    總之,無論是類中的構造函數(shù)還是普通的類方法,實際調用它們的誰,則第一個參數(shù)self就代表誰。

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多