在創建一個類的過程中,會發現這個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來傳遞。 |