物件導向3 析構函式和私有屬性

2022-02-20 18:45:10 字數 3072 閱讀 3470

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:

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)

把age改成私有屬性以後,居然還可以正常賦值以及執行。鬱悶啊啊啊啊啊啊啊啊啊啊-------------------,已經通過博問解決。參照最下面的截圖。

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...