一、前言

常常看到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的慣用法在具體化物件時要先執行的方法。

 

arrow
arrow
    創作者介紹
    創作者 恩哥Python 的頭像
    恩哥Python

    恩哥Python量化教室-零基礎也能學會Python

    恩哥Python 發表在 痞客邦 留言(2) 人氣()