一、前言
常常看到self是什麼?self怎麼用!?五分鐘看完文章馬上會寫python。
至於__init__是什麼?不懂得一同看過來~
還不懂類(Class)的可以五分鐘先看這一篇~
【Python基礎】什麼是class類:五分鐘看完文章馬上懂物件導向及寫code
YouTube:恩哥想當快樂社畜
https://youtube.com/channel/UCuj9oYDXt4D0mBgae4ODK-g
二、什麼是self?
總歸一句話就是自己,跟英文的self是一樣的~
讓我們來看看以下的範例:
(1) 沒有self 不用創建object
既然沒有self在預設的參數中我們就可以直接使用類(Class)中的方法,
可以看到我們直接使用Cat.run(),並沒有先具體化物件~
class Cat:
def __init__():
color = 'Red'
legs = 'Long'
def run():
print('Cat is running')
Cat.run() # Cat is running
壞處是我在同一類中不能使用同一類宣告的變數或方法,什麼意思呢?看下一個範例。
(2) 有self 要先具體化物件
這邊可以注意到nask = Cat() 先創具體化物件,也就是把我們的貓咪設計圖做成貓叫nash。而後再用我們生成的物件nask去呼叫方法.run(),nask.run()就打印出Cat is running Long,你會發現一件事如果使用self在同一類(Class)中不同方法(def)間也可以使用前面有加上self.的變數或者方法,在run(self)裡面用了__init__時宣告的變數self.legs。
class Cat:
def __init__(self):
self.color = 'Red'
self.legs = 'Long'
def run(self):
print('Cat is running', self.legs) # 可以在同一類中呼叫有冠上self的變數及方法
nask = Cat() # 先創具體化物件
nask.run() # Cat is running Long
(3) __init__是什麼?
就是物件在具體化的時候會把__init__(self)底下的運算邏輯等先執行一遍,在nask = Cat()具體化物件的時候,__init__裡面都被執行一遍了,所以打出Cat say hi。
class Cat:
def __init__(self):
self.color = 'Red'
self.legs = 'Long'
print('Cat say hi')
def run(self):
print('Cat is running', self.legs) # 可以在同一類中呼叫有冠上self的變數及方法
nask = Cat() # 先創具體化物件
nask.run() # Cat is running Long
'''執行
Cat say hi
Cat is running Long
'''
(4) __init__預設參數
在__init__(self, name)的參數因為具體化物件時會執行,所以在具體化物件時間先給,可以在下面執行看到先具體化物件打印出Cat say hi,而後執行nask.run()打印出Cat is running Long及恩恩。
class Cat:
def __init__(self, name):
self.color = 'Red'
self.legs = 'Long'
self.name = name
print('Cat say hi')
def run(self):
print('Cat is running', self.legs)
print(self.name)
nask = Cat('恩恩') # __init__的參數具體化物件時要先給
nask.run() # Cat is running Long
'''執行
Cat say hi
Cat is running Long
恩恩
'''
三、後記
其實你會發現self就是在class裡面溝通的橋樑!
而__init__只是python的慣用法在具體化物件時要先執行的方法。