前言
哈嘍, 大家好, 我是了不起!
歡迎大家來觀看了不起的冒險之旅. 為了方便起見, 文中以小知為名. 講述了不起在Python異世界的冒險之旅.
天空之城是座高聳云端的城堡. 位于西海岸附近, 在城堡的最頂端可以眺望到天空之海. 直到格蘭之森那場大火的發生,使得圍繞在它周圍的魔法陣力量減弱,人們才終于重新看到天空之城的真實模樣. 當時,關于天界的傳聞甚至比天上的繁星還多,但是卻沒有一個人能夠證明它真實存在。
實例對象和類對象創建過程內存分析
我們以下面代碼為例,分析整個創建過程:
classStudent:
company="sxd"#類屬性
count=0#類屬性
def__init__(self,name,score):
self.name=name#實例屬性
self.score=score
Student.count=Student.count+1
defsay_score(self):#實例方法
print("我的公司是:",Student.company)
print(self.name,"的分數是:",self.score)
s1=Student("時間靜止",18)#s1是實例對象,自動調用__init__()方法
s2=Student("不是簡史",81)
s1.say_score()
print('一共創建{0}個Student對象'.format(Student.count))
print("s1的引用:",id(s1))
print("s2的引用:",id(s2))
print("Student的引用:",id(Student))
默認的類方法
init構造方法和__new__ 方法
初始化對象, 我們需要定義構造函數
__init__()
方法 構造方法用于執行“實例對象的初始化工作”, 即對象創建后, 初始化當前對象的相關屬性, 無返回值 如果將對象比作一座房子, 則構造方法(__init__)
是負責初始化(裝修) , 不是建對象(房子)
__init__()
的要點如下(約等于Java的構造方法):
-
名稱固定, 必須為:
__init__()
-
第一個參數固定, 必須為:
self
.self
指的就是剛剛創建好的實例對象 -
構造函數通常用來初始化實例對象的實例屬性 通過“
類名(參數列表)
”來調用構造函數. 調用后, 將創建好的對象返回給相應的變量. 比如:s1 = Student("時間靜止", 80)
-
__init__()
方法: 初始化創建好的對象,初始化指的是: "給實例屬性賦值" -
如果我們不定義
__init__
方法, 系統會提供一個默認的__init__
方法. 如果我們定義了帶參的__init__
方法, 系統不創建默認的__init__
方法 -
__new__()
方法: 用于創建對象, 但我們一般無需重定義該方法
注意:
- Python中的 self 相當于C++中的 self指針 , JAVA和C#中的 this 關鍵字
- Python中, self 必須為構造函數的第一個參數, 名字可以任意修改, 但一般都叫做 self.他的作用是指向當前對象的本身/當前對象的引用
__del__方法(析構函數)和垃圾回收機制
__del__()
稱為“析構方法”, 用于實現對象被銷毀時所需的操作. 比如: 釋放對象占用的資源, 例如: 打開的文件資源、網絡連接等
注意:
-
Python實現自動的垃圾回收, 當對象沒有被引用時(引用計數為0), 由垃圾回收器調用
__del__()
-
我們也可以通過 del語句 刪除對象, 從而保證調用
__del__()
-
系統會自動提供
__del__
方法 , 一般不需要自定義析構方法.
實操代碼
classPerson:
def__del__(self):
print("銷毀對象:{0}".format(self))
p1=Person()
p2=Person()
delp2
print("程序結束")
-
代碼
+關注
關注
30文章
4750瀏覽量
68357 -
python
+關注
關注
56文章
4782瀏覽量
84456
發布評論請先 登錄
相關推薦
評論