python類與物件 如何讓物件支援上下文管理

2022-07-24 07:18:12 字數 2250 閱讀 9319

問題舉例

乙個telnet客戶端的類telnetclient, 呼叫例項的connect(),login(),interact方法

啟動客戶端與伺服器互動,互動完畢後需要呼叫cleanup()方法,關閉已連線的socket,

以及將操作歷史記錄寫入檔案並關閉。

能否讓telnetclient的例項支援上下文管理協議,從而代替手工呼叫connect(),cleanup()方法。

實現上下文管理協議,即實現類的__enter__, __exit__方法,

它們分別在with開始和結束時被呼叫。

**說明:這段**並不能直接執行不了,因為伺服器ip連線不上,

這裡大家感受下大致實現思路即可即可

from sys import

stdin, stdout

import

getpass

import

telnetlib

from collections import

deque

class

telnetclient:

def__init__(self, host, port=23):

self.host =host

self.port =port

def__enter__

(self):

self.tn =telnetlib.telnet(self.host, self.port)

self.history =deque()

return

self

def__exit__

(self, exc_type, exc_value, exc_tb):

print('

in __exit__

', exc_type, exc_value, exc_tb)

self.tn.close()

self.tn =none

with open(

'history.txt

', 'a'

) as f:

f.writelines(self.history)

return

true

deflogin(self):

#user

self.tn.read_until(b"

login: ")

user = input("

enter your remote account: ")

self.tn.write(user.encode(

'utf8

') + b"\n"

)

#password

self.tn.read_until(b"

password: ")

password =getpass.getpass()

self.tn.write(password.encode(

'utf8

') + b"\n"

) out = self.tn.read_until(b'$ '

) stdout.write(out.decode(

'utf8'))

definteract(self):

while

true:

cmd =stdin.readline()

ifnot

cmd:

break

self.tn.write(cmd.encode(

'utf8'))

out = self.tn.read_until(b'

$ ').decode('

utf8')

stdout.write(out[len(cmd)+1:])

stdout.flush()

#client = telnetclient('192.168.0.105')

#client.connect()

#client.login()

#client.interact()

#client.cleanup()

with telnetclient(

'192.168.0.105

') as client:

raise exception('

test')

client.login()

client.interact()

print('

end')

__exit__中返回true是為了壓制異常向上拋

python物件導向 類與物件

嗯,本學期開始學python物件導向的內容了,唔,前面的內容會在後期有時間慢慢補的。類與物件 我生活中有這樣一句話叫 物以類聚,人以群分 重點是前面那句,什麼是類呢,就是一類事物,比如人類 動物類 這是乙個大的範圍 類是封裝物件的屬性和行為的載體,反過來說,具有相同屬性和行為的一類實體被稱為類 而物...

Python 類與物件

引數 預設值 可變引數 關鍵字引數 命名關鍵字引數 返回值 python class student def init self,arg,kwargd 可變引數 arg kwargd if name in kwargd self.name kwargd name defmain s student ...

Python 類與物件

python是一種物件導向的程式語言。python中,幾乎所有東西都是乙個物件。物件有屬性和方法。類是用於建立物件的 藍圖 要建立類,請使用關鍵字class 示例 建立乙個名為myclass的類,其屬性名為x class myclass x 8現在可以使用myclass類建立物件 示例 建立乙個名為...