1 析構函式:在例項釋放,銷毀的時候自動執行的。通常用於做一些收尾工作,如關閉一些資料庫鏈結,關閉一些開啟的臨時檔案等。釋放記憶體。
python的自動**機制:隔一段時間,python會掃瞄記憶體中那些沒有被變數引用的值(有沒有門牌號),如果沒有被任何乙個變數引用的話,就會自動刪除。
class person:執行結果:cn="china"
def __init__(self,name,age):
self.name=name
self.age=age
def got_shot(self):
print("ah...,i got shot...")
def __del__(self): #析構函式,不能傳任何引數
print("徹底玩完了,析構函式執行")
p1=person('lily',22)
p1.got_shot()
p2=person('jack',22)
p2.got_shot()
ah...,i got shot...
ah...,i got shot...
lily徹底玩完了,析構函式執行
jack徹底玩完了,析構函式執行
2.用del主動釋放記憶體, del 刪除的是變數名(門牌號)。不是記憶體。當發現某個變數沒有被引用時(沒有門牌號了),這塊記憶體才會被清除。
class person:執行結果:cn="china"
def __init__(self,name,age):
self.name=name
self.age=age
def got_shot(self):
print("ah...,i got shot...")
def __del__(self): #析構函式,不能傳任何引數
print("%s徹底玩完了,析構函式執行"%self.name)
p1=person('lily',22)
p1.got_shot()
del p1
p2=person('jack',22)
p2.got_shot()
ah...,i got shot...
lily徹底玩完了,析構函式執行
ah...,i got shot...
jack徹底玩完了,析構函式執行
3.私有屬性:通過p1.age可以任意修改p1的年紀,現在想辦法使它變成乙個私有屬性。
私有屬性和私有方法一樣,都是在前面加兩個小下劃線就可以了。
__self.name=name
__got_shot(self):
class person:把age改成私有屬性以後,居然還可以正常賦值以及執行。鬱悶啊啊啊啊啊啊啊啊啊啊-------------------,已經通過博問解決。參照最下面的截圖。cn="china"
def __init__(self,name,age):
self.name=name
self.age=age
def got_shot(self):
print("ah...,i got shot...")
p1=person('lily',22)
p1.age=23
print(p1.age)
p2=person('jack',22)
class person:執行結果:cn="china"
def __init__(self,name,age):
self.name=name
self.__age=age
def got_shot(self):
print("ah...,i got shot...")
p1=person('lily',22)
p1.__age=23
print(p1.__age)
p2=person('jack',22)
4.如何從外部訪問私有屬性:
class person:執行結果:cn="china"
def __init__(self,name,age):
self.name=name
self.__age=age
def got_shot(self):
print("ah...,i got shot...")
p1=person('lily',22)
#p1.__age=23
print(p1.__age)
p2=person('jack',22)
traceback (most recent call last):
file "c:/abccdxddd/oldboy/py_exercise/day6/aaa.py", line 11, in
print(p1.__age)
attributeerror: 'person' object has no attribute '__age'
那麼怎麼樣從外部去訪問私有屬性呢?在內部定義了乙個方法 show_status(self):
class person:執行結果:cn="china"
def __init__(self,name,age):
self.name=name
self.__age=age
def got_shot(self):
print("ah...,i got shot...")
def show_status(self):
print("age is: %s"%self.__age)
p1=person('lily',22)
p1.show_status()
age is: 22
關於私有屬性的博問:
物件導向 類 字段 屬性 建構函式 析構函式
物件導向的基本概念 1 物件 物件是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具體的事物,還能表示抽象的規則 計畫或事件。2 物件的狀態和行為 物件具有狀態,乙個物件用資料值來描述它的狀態。物件還有操作,用於改變物件的狀態,物件及其操作就是物件的行為。物件實現了...
《物件導向程式設計 C 》析構函式
建立類的物件時,會自動呼叫某個合適的建構函式,同樣,當物件被摧毀時,也會自動呼叫乙個析構函式。析構函式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號 作為字首,它不會返回任何值,也不能帶有任何引數。析構函式有助於在跳出程式 比如關閉檔案 釋放記憶體等 前釋放資源。物件的摧毀出現在以下兩種情況 ...
物件導向(私有)屬性和方法
1 屬性 1 例項屬性 即 init self 中的屬性。需要先例項化乙個物件,然後才能被呼叫。2 類屬性 即寫在乙個類中,方法外面的屬性。供整個類及由類派生出來的物件使用,通過類名點屬性呼叫。2 方法 1 例項方法 即引數中含有self的方法,需要先例項化乙個具體物件,通過物件呼叫該方法。其中,s...