iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0
  • 單底線與雙底線
    為了更加區分個別的用途,可以把它們區分為"__"與"_"兩種:

單底線:含有隱藏 , 未知 , 省略之義。個別解釋:空格
雙底線:含有唯一 , 替代 , 不變之義。個別解釋:宣告 , 調用


__x__的用法

這個用法大都不是自定義的變數,而是python裡的控制變數(為表留字)。表示此用法是為了達成某種目的而產生。
使用dir可查詢這些控制變數

dir() #查詢當前使用的保留字
dir(int) #整數牽涉保留字
dir([]) #陣列牽涉保留字
dir(object) #與物件有關保留字

亦可使用?查詢使用方法:?<查詢物件>

  • self是神馬?

self是__init__調用的第一個內建參數,常解釋為把定義內特定物件名稱傳回給自己(包含之後建立的),是OOP定義的基礎。當然名稱也可隨意定義,但會用這些保留字一定是有它的原因,除了避免名稱混淆以外 可讓讀程式的人清楚知道這物件內子物件都是自己的。

1."init"

(markdown會隱藏頭尾底線=.= , 這篇只要是底線都為__x__形式)
init__是類別class第一個調用物件(可解釋為主物件),也可解釋為初始化。如果想讓函式內所有子物件或定義此函式的class第一個呼叫到的話就須使用__init

class bank(object):
    def __init__(self, acct , pwd): #初始化class
        self.acct = acct
        self.pwd = pwd
bank = bank('me', 123456789) #self = bank(建立物件)
print(bank.acct , bank.pwd)

這樣裡面變數也是可調用的物件,而不像一般函式只把變數當執行方法。但要注意這裡class裡放的object就是導向__init__裡所有的self物件。

2.name__和__main

  • __name__可以想成是此程式最上層物件的名稱
#test.py
print('__name__' ,',', __name__ )

Out[ ]:__name__ ,__main__

『主要』,表示了所有物件名稱都屬於此程式內部(最上層物件為test.py)。就可用來判斷物件的狀態(擁有或外部引入)。

#test.py
def a():
        print("i'am A")
        print(__name__)
def b():
        print('i am B')
        print(__name__)
a()
b()
'''
'''
#outest.py
from QwQ import *

Out[ ]:i'am A
        test
        i am B
        test
  • if的用法

在物件引入之後 常看到程式有『if name == 'main'』的用法在代碼尾出現。沒錯!
就是為避免物件調用2次,因為當引入時,是把程式的所有方法調用。又因python的『萬般皆物件』特性,為了避免重複就可採用辨認物件位置的方法。

##使用前##
#QwQ.py
def a():
        print("i am A")
def b():
        print('i am B')
def _c():
        print('watch out!!!')
a()
b()
_c()
'''
'''
#test.py
from QwQ import *
from QwQ import _c

Out[ ]:i am A
        i am B
        watch out!!!
##使用後##
#QwQ.py
def a():
        print("i am A")
def b():
        print('i am B')
def _c():
        print('watch out!!!')

if (__name__ == '__main__'): #output只給當前程式
        a()
        b()
        _c()
'''
'''
#test.py
from QwQ import *
from QwQ import _c

Out[ ]:沒東西了~

上一篇
[D14] OOP愛底線
下一篇
[D16] OOP之設計1
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言