@2020.4.19
基礎題(60分)
1.寫代碼是要避免回圈匯入,什么是回圈匯入?
回圈匯入是指 在一個模塊匯入的程序中,匯入另一個模塊,且在另一個模塊中又回傳來匯入第一個模塊的名字,這種情況下會加載模塊失敗,拋出例外,
2.模塊的搜索順序
記憶體中已加載的模塊------》內置的模塊——》sys.path路徑中的模塊
3.以下代碼什么時候使用
```python
if __name__ == "__main__":
print("test")
```
在主程式中用來控制 .py檔案在不同的應用場景下,執行不同的邏輯處理,
4.什么是面向程序編程思想?
面向程序編程思想,核心是“程序”二字,即 解決問題的程序步驟,先干什么后干什么,
5.有如下變數 請使用hashlib 為其加密 并 加鹽
import hashlib # 256 hash = hashlib.sha256('898oaFs09f'.encode('utf8')) hash.update('ccat'.encode('utf8')) print(hash.hexdigest())
6.判斷一個物件是否屬于str型別,判斷一個類是否是另外一個類的子類?
c = '1345' print(isinstance(c,str)) print(issubclass(str,object)) # 輸出結果: True True
7.定義一個老師類,定制列印物件的格式為‘<name:C_DSB age:18 sex:male>’
class Teacher: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def __str__(self): return '<name: %s age:%s sex:%s >' % (self.name, self.age, self.sex) tea = Teacher('MILI', 27, 'male') print(tea)
8.定義一個自己的open類,控制檔案的讀或寫,在物件被洗掉時自動回收系統資源
class MYopen: def __init__(self, file, io, encoding): self.file = file self.io = io self.encoding = encoding self.my_open = open(self.file, self.io, self.encoding) def __del__(self): self.my_open.close() print("close the file") my_open1 = MYopen(r'D:\DOCUMENTS\DUCU\CourseSystem\conf\settings.py', 'rt', 'utf-8') del my_open1
9.什么是反射?反射的4個方法分別是什么?分別的作用是什么?
(1)反射是指 在程式運行的狀態中,對于任意一個類,都可以知道這個類的所有方法和屬性;對于任意一個物件,都能夠呼叫它的任意方法和屬性,這種動態獲取程式資訊和動態呼叫物件的功能就是反射機制,
(2)反射的四個方法:
hasattr:判斷物件是否有某種屬性
getattr :獲取物件的某種屬性,若無則回傳None
setattr :為物件賦值
delattr:洗掉物件的某個屬性
10.property的作用是什么,簡述內部實作原理
property裝飾器,可以將類中的函式偽裝成物件的資料屬性,物件在訪問這個特殊的屬性時,會觸發該功能,執行并回傳執行結果,
11.__str__的作用是什么?
__str__是內置方法,列印回傳字串格式的回傳值
12.學生類與,教師類同時擁有,姓名,性別,年齡三個屬性,老師類比學生類多一個工資屬性,請撰寫代碼以減少重復代碼!
class People: def __init__(self,name,sex,age): self.name = name self.sex = sex self.age = age class Student(People): def __init__(self): print('<name: %s sex:%s age:%s >' % (self.name, self.sex, self.age)) class Teacher(People): def __init__(self,salary): self.__getattribute__(People) self.salary = salary
13.封裝就等于隱藏這種說法是否正確,為什么?
不正確,封裝不是單純的隱藏
封裝的目的是區分內外,封裝后的屬性可以直接在類的內部使用,但是不能在外部使用,若需要使用,則要定義介面,讓外部通過介面來訪問封裝的屬性,
14.類中的 __getattr__ 方法什么時候被執行?
__getattr__ 方法只有在使用“點呼叫屬性且屬性不存在時,才會被觸發
15.什么是抽象類?
抽象類是一種特殊的類,特殊之處在于它只能被繼承,不能被實體化
16.OSI七層網路協議分別是哪些 ?
應用層,表示層,會話層,傳輸層,網路層,資料鏈路層,物理層
17.以太協議,IP協議,TCP/UDP協議,分別作業在哪些層
以太協議——資料鏈路層
IP協議——網路層
TCP/UDP協議——傳輸層
18.埠號用于標識什么?
埠用于表示應用程式的入口
19.簡述三次握手與四次揮手的經歷
(1)三次握手——建立連接協議
=第一次握手:客戶端發送syn包(syn= x)的資料包到服務器,并進入SYN_SEND狀態,等待服務器確認
=第二次握手:服務器收到客戶端發來的syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn= y)即SYN+ACK包,接著服務器進入SYN_RECV狀態
=第三次握手:客戶端收到服務器發來的SYN+ACK包,接著向服務器發送確認包ACK(ack=y+1),以表示確認自己收到了SYN+ACK包;發送確認包ACK(ack=y+1)完畢后,客戶端和服務器端都進入了ESTABLISHED狀態,此時三次握手就完成了,
(2)四次揮手
=第一次揮手:客戶端程式運行到close()指令,處于FIN_WAIT_1的狀態,向服務器端發送FIN(seq=x+2)+ACK(ack=y+1)包,等待服務器的回應
=第二次揮手:服務器接送到客戶端發來的FIN+ACK包,向客戶端發送
ACK(ack=x+3),此時服務器進入CLOSE_WAIT狀態,客戶端接收到服務器發送的ACK(ack=x+3)包,進入FIN_WAIT_2的狀態
=三次揮手:服務器向客戶端發送ACK(ack=x+3)后,接著進入LAST_ACK狀態,并向客戶端發送FIN(seq=y+1)包,確認close()命令的執行,
=第四次揮手:客戶端接收到FIN(seq=y+1)包,進入TIME_WAIT狀態,向服務器發送ACK(ack=y+2)包,此時四次揮手完成,
20.什么是面向物件編程思想?
面向物件編程思想的核心是“物件”,即將物件的資料和功能進行整合,
21.什么是面向物件三大特性?分別的作用是什么?
(1)封裝:將物件的屬性進行封裝,明確區分內外,并提供介面供外部間接訪問內部的屬性,
(2)繼承:最大限度地重用代碼,減少代碼的冗余,增強代碼的可擴展性
(3)多型:增加代碼的功能,可擴展性
22.__getattr__在什么時候觸發?
__getattr__ 方法只有在使用“點呼叫屬性且屬性不存在時,才會被觸發
23.__getattrubite__在什么時候觸發?
__getattrubite__ 在使用“點呼叫屬性時,不管屬性是否存在,都會被觸發執行
24.__call__在什么時候觸發?
在有物件后面加上括號()時觸發的,
25.什么是元類?
元類不是父類,是用來實體化產生類的類
26.如何用元類控制類的創建,請寫代碼?
class Mymeta(type): def __init__(self,x,y,z): print("run520") print(self) def __new__(cls, *args, **kwargs): print('run1314') return type.__new__(cls,*args,**kwargs) People = Mymeta("People",(object,),{...}) class People(metaclass=Mymeta) def __init__(self,name,age): self.name = name self.age = age def say(self): print('%s;%s'%(self.name,self.age))
27.物件的系結方法、類的系結方法與靜態方法的區別是什么?
物件的系結方法——是系結到物件的方法,正常定義的函式默認是系結到物件的
類的系結方法——加上裝飾器@classmethod,就是函式就系結到類了
靜態方法——加上裝飾器@staticmethod,就是非系結方法,即靜態函式
28.物件的屬性查找順序是什么?
有繼承關系后,物件在查找屬性時,先從物件自己的__dict__中找,如果沒有,則去子類中找,然后再去父類中找,
29. 什么是新式類?什么是經典類?
(1)在pyhton2中,有經典類和新式類之分,
沒有顯式繼承object類的類以及其子類,都是經典類
顯式繼承object類的類以及其子類,都是新式類
(2)在python3 中,即使沒有顯式繼承object類,也會默認繼承該類,所以python3 中都是新式類
30.Python面向物件中的多繼承的繼承關系如何查找?
(1)如果多繼承是非菱形繼承,經典類和新式類的屬性查找順序一樣,都是一個分支一個分支地找下去,最后再找object類
(2)如果多繼承是菱形繼承,經典類與新式類的屬性查找不一樣,
經典類:深度優先,會在檢索的時候,一條路走到底一直到父類
新式類:廣度優先,會在檢索時,最后一個分支的時候檢索父類
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156492.html
標籤:Python
下一篇:python機器學習(1)
