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函式用來讀取資料成員 ...