私有化,拷貝

2021-09-06 15:08:03 字數 1835 閱讀 8901

我們在建立類後,一般會定義變數。

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 沒有和其他程式語言一樣的定義共有屬性和私有屬性的關鍵字,實現屬性私有化和屬性保護,都是使用 格式進行的偽效果。私有化使用場景 保護屬性 比如銀行存款等,存款直接外放非常危險,就可以私有化,然後通過類提供的方法增加刪減鉛筆的金額,對存款進行保護。內部過濾 過濾一下不符合屬性的資料,資料不...