Python面試中,如果想考核面試者對面向對象的理解,我會問這樣一個問題,請你談一談對self的理解?
self 這個很常見,我們定義一個python類的方法時,第一個參數就是self,代碼如下:
class MyDemo:
def test_self(self):
pass
那麼我們真的理解了什麼是self嗎?我相信有好多同學,就是簡單地記住了:這是python中定義類方法的一個固定寫法,有self的就是類方法,沒有self的就是函數!的確,這是python中最基礎的方法和函數的區別。那麼self的本質又是什麼呢,其實他就是類的實例化對象!也就是說誰在用某個方法,self指的就是它。
我們看下面的例子
class MyClass:
def test_self(self):
print(self)
print("----------第一個實例----------")
my=MyClass()
print(my)
my.test_self()
print("----------第二個實例----------")
my1=MyClass()
print(my)
print(my1)
輸出:
<__main__.MyClass object at 0x00000066AF550448>
<__main__.MyClass object at 0x00000066AF550448>
----------第二個實例----------
<__main__.MyClass object at 0x00000066AF550448>
<__main__.MyClass object at 0x00000066AF550388>
從第二個實例的輸出結果我們可以看到,我們一共實例化了兩個實例,一個是<__main__.MyClass object at 0x00000066AF550448>,另一個是<__main__.MyClass object at 0x00000066AF550388>
繼續分析我們可以看到第一個實例中,實例化的my 和方法test_self(self) 中的self的值其實是一樣的!
因此我們可以得出結論:self就是實例化的對象!