python 屬性封裝

2021-09-12 11:18:38 字數 1145 閱讀 1134

class model:

__name = "dnn"

def __init__(self, name):

self.__name = name

def print_name(self):

print(self.__name)

@classmethod

def print_cls_name(cls):

print(cls.__name)

def main():

model.print_cls_name()

cnnmodel = model("cnn")

cnnmodel.print_name()

# print(model.__name)

# print(cnnmodel.__name)

if __name__ == '__main__':

main()

兩行注釋分別執行後得到如下輸出:

attributeerror: type object 'model' has no attribute '__name'

attributeerror: 'model' object has no attribute '__name'

1. 通過雙下劃線開頭,可以將資料屬性私有化,對於方法一樣適用

2. 從報錯資訊也能看出, model 是乙個 type object , cnnmodel 是乙個 model object

python中的私有化是假的,本質上是做了一次名稱替換,因此實際中也有為了方便除錯而適用單下劃線的情況,而私有化也就全憑自覺了

另附私有屬性方法:

(1)_***      "單下劃線 " 開始的成員變數叫做保護變數,意思是只有類物件(即類例項)和子類物件自己能訪問到這些變數,需通過類提供的介面進行訪問;不能用'from module import *'匯入

(2)__***    類中的私有變數/方法名 (python的函式也是物件,所以成員方法稱為成員變數也行得通。)," 雙下劃線 " 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。

(3)__***__ 系統定義名字,前後均有乙個「雙下劃線」 代表python裡特殊方法專用的標識,如 __init__() 代表類的建構函式。

詳解屬性封裝

什麼是屬性封裝?我們先來看看下面這段 class student class program 年齡 a.name,a.age console.readline 這是一段很簡單的 乙個學生類,乙個測試類,並給這個物件字段進行賦值操作,這只是正常情況下,我記得我在某個博文上看到這麼一句話 程式設計師的2...

Python類總結 封裝 私有屬性,方法

class person def init self,name,password key 123 靜態私有屬性 self.name name self.password password 在類的內部定義私有屬性,會轉換為 person password def get pwd self 通過公有方法...

C 屬性封裝之初始封裝

以誰做什麼來表達程式的邏輯,以物件為中心,物件的所有行為都通過呼叫自己的函式來完成。體現在 層面就是資料成員呼叫自己的函式以及通過函式來對自己進行操作.1.可以在成員函式中做一些必要的限制 2.有時候確實不允許使用者改變資料成員 3.對資料的封裝一般用set來對函式賦值 get函式用來讀取資料成員 ...