前後帶槓槓的都是特殊的內建函式 會在某些時機自動執行 一般情況我們不應該直接呼叫他們
當我們需要自定義列印顯示內容時 就需要實現__str__方法
該方法 必須 返回乙個字串 返回的是什麼 列印出來就是什麼
class test:
def __init__(self,name):
self.name = name
def __str__(self):
print("str run....")
return self.name
t = test("安公尺")
print(t)#上下兩個是一樣的..
print(t.__str__())
# 在講乙個物件轉換字串時 本質就是在呼叫這個物件 __str__方法
print(str(t))
當物件被從記憶體中刪除時會自動執行
另一種情況時 程式設計師手動刪除了這個物件 也會自動執行
什麼時候使用它
在python中 有自動記憶體管理機制 所以 python自己建立的資料 不需要我們做任何操作
但是有一種情況 我們使用python開啟了乙個不屬於python管理的資料
(比如開啟了乙個檔案 這個檔案一定是作業系統在開啟 會占用系統記憶體 而python直譯器無法作業系統記憶體的)
所以 當你的python直譯器執行結束後 檔案依然處於開啟狀態 這時候就需要使用__del__來關閉系統資源
簡單地說 當程式執行結束時 需要做一些清理操作 就使用__del__
__del__也稱之為 析構函式
即:分析構造 並拆除這個物件
class student:
def __del__(self):
print("物件被刪除了....")
stu = student()
# 手動刪除 立即執行__del__
del stu
import time
time.sleep(5)
print('太遲了,物件已被刪除')
class textfile:
def __init__(self,filepath,mode="rt",encoding="utf-8"):
self.file = open(filepath,mode=mode,encoding=encoding)
def read(self):
return self.file.read()
def write(self,text):
self.file.write(text)
# 該方法其實就是乙個通知性質 僅僅是告訴程式設計師 物件即將被刪除
def __del__(self):
# 在這裡關閉系統的檔案 妥妥的
self.file.close()
"""
exec
execute的縮寫
表示執行的意思
其作用 是幫你解析執行python** 並且將得到的名稱 儲存到制定的命名空間 直譯器內部也是呼叫它來執行**的
"""
# 引數一 需要乙個字串物件 表示需要被執行的python語句
# 引數二 是乙個字典 表示全域性命名空間
# 引數三 也是乙個字典 表示區域性命名空間
globalsdic = {}
localsdic = {}
exec("""
aaaaaaaaaaaaaaaaaaaa = 1
bbbbbbbbbbbbbbbbbbbbbbbbbbbb = 2
def func1():
print("我是func1")
""",globalsdic,localsdic)
# 如果同時制定了 全域性和區域性 則 會字串中包含名稱 解析後存到區域性中
# print(globalsdic)
print(localsdic)
localsdic["func1"]()
# # 如果只傳了乙個傳引數 則 將字串中包含名稱 解析後存到全域性中
# exec("""
# aaaaaaaaaaaaaaaaaaaa = 1
# bbbbbbbbbbbbbbbbbbbbbbbbbbbb = 2
## """,localsdic)
python 類的內建方法
1.doc 列印類的備註 class animal object 建立動物類 def run self 動物都會跑 pass a animal 列印animal類的備註 print a.doc 2.call 將類進行例項化後,呼叫該例項時,會執行 call 方法。注意 類中無 call 方法時,例項...
類中的內建方法
一 簡單介紹 以上都是對該方法的描述,使用哪一種都可以 類中的每乙個雙下劃線方法都有它自己的特殊意義 二 內建方法類別 一 call 方法 案例class a def call self,args,kwargs print 執行call方法 a a a a.call 也可以直接呼叫call方法 物件...
幾個類的內建方法
類的內建方法 雙下方法 str 當類中定義了 str 方法後,print 這個類物件時 會呼叫 str 或者格式化 s輸出物件時,都會觸發 str repr 當類中定義了 repr 方法後,print repr a 就會呼叫a物件中的 repr 方法。格式化輸出用 r時同樣會呼叫 repr 同樣物件...