self的意思是“自身”,python中代表類別的實例,而非類別。 self只有在類別的方法中才會有,獨立的函數或方法是不必帶有self的;self在定義類別的方法時是必須有的。 self名稱不是必須的,你可以定義成a或b或其它名字都可以,但是約定成俗,可減少理解難度。
首先我們要搞清楚Python的類別中為要什麼要用到self這個單字呢,為什麼不用"zhangsan"、"lisi"這樣的名字呢,這肯定有他的用意。
self代表類別的實例,而非類別。
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
執行結果如下:
<__main__.Test object at 0x000000000284E080> <class '__main__.Test'>
從上面的例子可以很明顯的看出,self代表的是類別的實例。而self.class則指向類別。
類別中的方法第一個參數必須是self ,不然實例無法正確呼叫類別中的方法,也就是說,如果方法中第一個參數不是self(廣義的),那麼這個方法是沒有任何價值的,因為實例無法呼叫它,一個無法被呼叫的方法真不知道有什麼用。
注意:把self換成this,結果也一樣,但Python中最好用約定俗成的self。
繼承時,傳入的是哪個實例,就是那個傳入的實例,而不是指定義了self的類別的實例。
class Parent: def pprt(self): print(self) class Child(Parent): def cprt(self): print(self) c = Child() c.cprt() c.pprt() p = Parent() p.pprt()
運行結果如下:
<__main__.Child object at 0x0000000002A47080> <__main__.Child object at 0x0000000002A47080> <__main__.Parent object at 0x0000000002A47240>
解釋:
#執行c.cprt()時應該沒有理解問題,指的是Child類別的實例。
但是在執行c.pprt()時,等同於Child.pprt(c),所以self指的依然是Child類別的實例,由於self中沒有定義pprt()方法,所以沿著繼承樹往上找,發現在父類別Parent中定義了pprt()方法,所以就會成功呼叫
以上是python self什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!