16 KO面試官OOP概念梳理

2021-09-24 02:49:20 字數 4502 閱讀 5955

在乙個軟體設計與開發中,所有包名、類名、函式名、變數名都應該遵循一定的開發規範

如無特殊情況, 檔案一律使用 utf-8 編碼

**避免採用空格縮排,統一使用tab進行縮排

塊級函式和類定義之間空二行,類成員與函式之間空一行

模組盡量使用小寫命名,首字母保持小寫,如果有多個單詞採用下劃線分割

類名使用駝峰(camelcase)命名風格,首字母大寫,私有類可用乙個下劃線開頭

函式名一律小寫,如有多個單詞,用下劃線隔開

變數名盡量小寫, 如有多個單詞,用下劃線隔開

自定義和呼叫函式時,可使用的正式引數型別有四種

必需引數:必須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣否則會報錯

預設引數:呼叫函式時,如果沒有傳遞引數,則會使用預設引數,預設引數間接實現python多型性

不定長引數:加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數

關鍵字引數:使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值

def

show

(a,b=10,

*c,**d)

:print

(f'a=,b=,c=,d='

)show(1,

2,3,

4,5,d=

6)

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在**賦值的python 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域

if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變數,外部也可以訪問

當內部作用域想修改外部作用域的變數時,就要用到global關鍵字了。

a =

1def

show()

: a =

2# 就近原則

a +=

1print

(f'show a='

) show(

)print

(f'out:'

)def

show2()

:global a # 注釋會丟擲異常

a +=

1print

(f'show2='

)show2(

)print

(f'out:'

)

py中裝飾器語法複習一切皆為物件,函式也是乙個物件,而函式名稱就是物件名稱

可以在函式中定義和返回另乙個函式

使用 @ 符號引用已有的函式(比如 @classmethod)後,可用於修飾其他函式,裝飾被修飾的函式

裝飾器在日誌、許可權、函式執行時間等場景中使用比較多

# 類也是物件

class

demo()

:def

show

(self)

: a =

2# 就近原則

definner()

:pass

# 物件也是物件

demo = demo(

)demo.show(

)print

(locals()

)

模組是乙個包含所有你定義的類、函式、變數的檔案,py為字尾。模組可以被別的程式引入,以使用該模組中的物件乙個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行,第一次被執行時被匯入模組會生成pyc格式的檔案

python 的 from 語句讓你從模組中匯入乙個指定的部分到當前命名空間中

每個模組都有乙個__name__屬性,當其值是』main』時,表明該模組自身在執行,否則是被引入

如果包定義檔案init.py 存在乙個叫做all的列表變數,那麼在使用 from package import * 的時候就把這個列表中的所有名字作為包內容匯入

搜尋路徑是在python編譯或安裝的時候確定的,安裝新的庫應該也會修改。搜尋路徑被儲存在sys模組中的path變數

in [4]

:import sys

in [5]

: sys.path

out[5]

:['d:\\anaconda3\\scripts'

,'d:\\anaconda3\\python37.zip'

,'d:\\anaconda3\\dlls'

,'d:\\anaconda3\\lib'

,'d:\\anaconda3'

,

python oop相關概念兩個下劃線開頭,宣告該屬性或者方法為私有,不能在類的外部被使用或直接訪問

init: 建構函式,在生成物件時呼叫,del: 析構函式,釋放物件時使用

多型性分為重寫與過載,子類可以重寫父類宣告的方法而方法中可變引數與關鍵字引數是py多型性表現形式

class

person

(object):

def__init__

(self, name)

: self.name = name

def__del__

(self)

:print

(f"例項物件:"

)print

(f"python直譯器開始**物件了"

)print

("類物件",id

(person)

)zhangsan = person(

"張三"

)print

("例項物件張三:",id

(zhangsan)

)# input('按任意鍵自動退出')

py物件導向**物件導向是相對於面向過程而言的

面向過程語言是一種基於功能分析的、以演算法為中心的程式設計方法;而物件導向是一種基於結構分析的、以資料為中心的程式設計思想

在物件導向語言中有乙個有很重要東西,叫做類,類是所有物件的模板

物件導向程式設計的乙個關鍵性觀念是將資料和資料的操作封裝在一起,組成乙個相互依存,不可分割的整體

http請求中get與post的區別

最直接的區別,get請求的引數是放在url裡的,post請求引數是放在請求body裡的

get請求的url傳參有長度限制,而post請求沒有長度限制

get請求的引數只能是ascii碼,所以中文需要url編碼,post請求沒有此限制,因此可以傳輸多**資料

get比post要更加省資源

py中函式與方法的區別

方法一般指與特定例項繫結的函式,通過物件呼叫方法時,物件本身將會被作為第乙個引數傳入 (系統自帶)

普通函式沒有self概念,普通的函式定義在模組中,而方法定義在類中

方法通常操作自身物件的屬性(例如對當前屬性列表進行排序),而函式在進行操作時通常指明排序物件 (例如系統內建函式sorted函式)

因為方式是定義在類中,因此方法定義肯定有縮排。而函式定義在模組中,因此它在定義時並不會縮排

你需要了解的self關鍵字

self在物件的方法中表示當前物件本身,如果通過物件呼叫乙個方法,那麼該物件會自動傳入到當前方法 的第乙個引數中

self並不是關鍵字,只是乙個用於接受物件的普通引數,理論上可以用任何乙個普通變數名代替

方法中有self形參的方法成為非繫結類的方法,可以通過物件訪問, 沒有self的是繫結類的方法, 只能通過類訪問

使用類訪問繫結類的方法時, 如果類方法中需要訪問當前類的成員,可以通過 class成員名來訪問

classa(

object):

# 屬性預設為類屬性(可以給直接被類本身呼叫)

num =

"類屬性"

# 類方法(不需要例項化類就可以被類本身呼叫)

@classmethod

deffunc2

(cls)

:# cls : 表示沒用被例項化的類本身

print

(f"func2 a id"

)print

(cls.num)

print

('a id',id

(a))

a1 = a(

)a1.func2(

)a.num =

'新類屬性'

a2 = a(

)a2.func2(

)

18 KO面試官之OOP簡答題

python 內建資料型別有哪些 整型 int 布林型 bool 字串 str 列表 list 元組 tuple 字典 dict python中 help 和 dir 函式的用途是什麼 dir 函式不帶引數時,返回當前範圍內的變數 方法和定義的型別列表 帶引數時,返回引數的屬性 方法列表 help ...

面試官感悟

其實之前也面試過幾個人,但都是零星的跟著別人一起,我也只是偶爾詢問一兩句就結束了。昨天這是一場真正的大型招聘會,而且面試也是相當規範,面對的還是社招。對於我這種初出茅廬來說,這是第一次真正接觸參與的一場招聘會,想起要面那些比自己工作年限還長的人,心裡很沒底,有點小擔心和緊張的。當然一整天下來也算體驗...

面試官問題

解釋一些壓縮感知理論 壓縮感知是一種全新的訊號採集和恢復理論,它打破了傳統的奈奎斯特取樣定律,可以從更少的觀測訊號訊號中重建出高質量的原始訊號。其基本思想是,當訊號是稀疏或可壓縮時,我們可以通過乙個隨機測量矩陣將高維訊號投影到低維空間,再通過乙個求解優化問題高概率的恢復原始訊號。解釋一下壓縮感知磁共...