python-關於類中的self的詳解和使用

在創建一個類的過程中,會發現這個self會時不時的出現,而且是自動就出現的,這個self究竟是何方神聖呢?


因爲略懂英語的緣故,我知道self是自己的意思,初步猜測這個self就是指類自己。驗證一下吧。

class Dog():
    name = '哈士奇'
    def speak(self):
       print(self)
dog1 = Dog()
dog1.speak()
print(dog1)
print(Dog)

輸出爲:

<main.Dog object at 0x000001A2A6134748>
<main.Dog object at 0x000001A2A6134748>
<class ‘main.Dog’>
我們發現,打印dog1這個對象和打印self是一樣的,說明這個self就是一個形參,指向的是創建的這個對象本身。

再來看一下,創建多個對象時:

class Dog():
    name = '哈士奇'
    def speak(self):
       print(self)
dog1 = Dog()
dog2 = Dog()
dog3 = Dog()

dog1.speak()
print(dog1)

dog2.speak()
print(dog2)

dog3.speak()
print(dog3)

結果:

<main.Dog object at 0x000001A2A618EC88>
<main.Dog object at 0x000001A2A618EC88>
<main.Dog object at 0x000001A2A618EDA0>
<main.Dog object at 0x000001A2A618EDA0>
<main.Dog object at 0x000001A2A618E7B8>
<main.Dog object at 0x000001A2A618E7B8>

結果已經顯而易見了,這樣我們在使用類時,就能隨心所欲了。

事實上,剛纔說過了,這個self就是一個形參,形參的名字我們可以隨便取,都是一樣的,只不過我們習慣上用self。

class Dog():
    name = '哈士奇'
    def speak(lala):
       print(f'我是{lala.name}')
dog1 = Dog()
dog1.speak()

我是哈士奇

注意:class中沒有函數的閉包,方法中不可直接使用類中的屬性,必須通過self來傳遞。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章