Python中為什麼要用self?

2021-09-03 02:30:52 字數 2019 閱讀 1694

參考文章:

self的含義與基本用法

python中為什麼要使用self

注意到文章中的一句話,避免非限定呼叫造成的全域性變數。

舉個例子來談談我對這句話的理解:

class father():

def __init__(self,name):

self.name = name

def selfdemo(self):

print('i am father, my name is %s_%s' % (self.name,self))

class son1(father):

def selfdemo(self):

print('i am son1, my name is %s_%s' % (self.name,self))

class son2(father):

def selfdemo(self):

print('i am son2, my name is %s_%s' % (self.name,self))

f1 = father('jack')

f2 = father('peter')

f1.selfdemo()

father.selfdemo(f1)

f2.selfdemo()

father.selfdemo(f2)

s1 = son1('jack son',)

s2 = son2('peter son',)

s1.selfdemo()

s2.selfdemo()

father.selfdemo(s2)

son1.selfdemo(s2)

其輸出如下:

i am father, my name is jack_<__main__.father object at>

i am father, my name is jack_<__main__.father object at>

i am father, my name is peter_<__main__.father object at>

i am father, my name is peter_<__main__.father object at>

i am son1, my name is jack son_<__main__.son1 object at>

i am son2, my name is peter son_<__main__.son2 object at>

i am father, my name is peter son_<__main__.son2 object at>

i am son1, my name is peter son_<__main__.son2 object at>

從中可以看出:

f1.selfdemo()與father.selfdemo(f1)的呼叫方式是等價的。

s1.selfdemo()與s2.selfdemo()的輸出符合預期。即使他們共用了父類的初始化函式,但是因為有self,他們仍然可以將各自的引數準確地傳遞到方法selfdemo()中。

這兩個語句(father.selfdemo(s2),son1.selfdemo(s2)),無論是其父類,還是其他類,都可以顯示呼叫例項。

所以的我self的作用有:

乙個類模板可以建立許多個例項,也可以派生出許多子類,self保證了每個父類的例項或者子類的例項,可以各自呼叫自身的方法,而不會呼叫其他例項的方法。換句話說,類中的方法相當於一台車,而宣告例項的過程中就把相當於把這台車造出來,並且這個例項的位址(名字)就是這台車的鑰匙,self就是那個預留的鑰匙孔。當然,這個例子舉得不是十分恰當,python中的類也是元類的例項,元類也是乙個例項。

可以通過顯示呼叫,使得子類的例項可以呼叫其父類的方法,顯得靈活了許多。

Python 為什麼要用yield

可能聽說過,帶有 yield 的函式在 python 中被稱之為 generator 生成器 何謂 generator 我們先拋開 generator,以乙個常見的程式設計題目來展示 yield 的概念。如何生成斐波那契數列 斐波那契 fibonacci 數列是乙個非常簡單的遞迴數列,除第乙個和第二...

Python 為什麼要用執行緒池?

多執行緒的情況下確實可以最大限度發揮多核處理器的計算能力,提高系統的吞吐量和效能。但是如果隨意使用多執行緒,對系統的效能反而有不利影響。比如下面的情況 建立執行緒是需要時間的,假設執行緒建立所需時間為t1,執行緒執行任務時間為t2,執行緒銷毀時間為t3,而往往t1 t3 t2。所以頻繁建立和銷毀執行...

PHP中變數為什麼要用

c vb php中 可以利用值 數和字串 的位置 1 函式引數 2 運算子運算元 包括vb中的賦值語句 3 陣列下標 包括phpkey標 能產生值 數和字串 的位置 1 簡單變數 2 陣列元素 3 結構成員 4 函式 5 常量 一般字面常量 c和php中define常量 vb中const常變數 6 ...