我們在建立類後,一般會定義變數。
1.變數有私有變數 和 公有變數xx
2.私有變數有__xx和_x兩種形式,前者的私有屬性最大,不能讓自己的子類和外部訪問;而後者可以讓自己的子類呼叫,也不可以讓外部訪問呼叫,例如用 from 檔名 import * 來匯入另乙個個檔案時,_x 的不被訪問,呼叫。
私有屬性中新增 getter和setter方法
一般用@property 和 @xx.setter 和@xx.getter
目的是為了將方法轉化為唯讀 ;重新實現乙個屬性的設定和讀取方式,可做邊界判斷。
== 號只是判斷兩個物件是否相等,兩個物件的id可以是不同的,也可以是相同的。
is 是比較兩個引用是否指向同乙個物件,這兩個物件的id是相同的。
來舉個栗子
a = [1,3,2]
b = a
if a == b: #在這裡,a與b的值是相同的,而且id也是相同的
print(true) #結果一定是true
else:
print(false)
a = [1,3,2]
b = [1,3,2]
if a == b :#在這裡,a與b的值是相同的,但id是不同的
print(true) #結果一定是true
else:
print(false)
a = [1,3,2]
b = a
if a is b :#這裡的a和b 值相等,而且id也是相等的。
print(true)#結果是true
else:
print(false)
a = [1,3,2]
b = [1,3,2]
if a is b :#這裡的a和b 值雖然相等,但是id不相等。
print(true)
else:
print(false)#結果一定是false
淺拷貝
淺拷貝就是拿來用一下,沒有給它確切的儲存位址。
a = [1,2,3,4]
b = a#這時,就可以當做是b拷貝了a的內容,位址沒有發生變化
深拷貝
深拷貝則是複製了內容,到另乙個地方,不用因為前者左右
import copy #匯入拷貝模組
a = [1,2,3,4]
print(id(a))
b = copy.deepcopy(a)
print(id(b))#id(a)和id(b)l兩者是不一樣的
淺拷貝對於可變型別和不可變型別的copy是不一樣的
# import copy
# #對可變資料
# a = '123'
# b = (4,5,6,)
# d = [a,b]
# print(d)
# c = copy.deepcopy(a)#深拷貝
# bb = c[:]
# print(id(bb))
# print(id(a))
# # if a is c :
# # print(true)
# # else:
# # print(false)
# '''用直接拷貝的時候(淺拷貝)(就是不使用import copy)
# 不可變資料是淺拷貝, 可變資料是深拷貝'''
python私有化方法 Python 私有化
python中的私有變數和私有方法仍然是可以訪問的 訪問方法如下 私有變數 例項.類名 變數名 私有方法 例項.類名 方法名 python並沒有真正的私有化支援,但可用下劃線得到偽私有。盡量避免定義以下劃線開頭的變數 1 單下劃線 開始的成員變數叫做保護變數,意思是只有類例項和子類例項能訪問到這些變...
構造方法私有化
本章目標 了解構造方法私有化的目的 掌握單態設計模式 構造方法私有化 類的封裝性不光體現在對屬性的封裝上,實際上方法也是可以被封裝的,當然,在方法封裝中也包含了對構造方法的封裝。例如 以下的 就是對構造方法進行了封裝。class singleton public void print 程式的意義 單...
python 私有化屬性
python 沒有和其他程式語言一樣的定義共有屬性和私有屬性的關鍵字,實現屬性私有化和屬性保護,都是使用 格式進行的偽效果。私有化使用場景 保護屬性 比如銀行存款等,存款直接外放非常危險,就可以私有化,然後通過類提供的方法增加刪減鉛筆的金額,對存款進行保護。內部過濾 過濾一下不符合屬性的資料,資料不...