__x = 1 # _a__x
變數名稱前加上__ 就是隱藏變數。
隱藏型別的原理是 在定義的時候把隱藏名稱變名 __attrname --------> _classname__attrname
class foo:
def __func(self):
print('from foo')
class bar(foo):
def __func(self):
print("from bat")
b = bar()
b._bar__func()
...這種隱藏只是變性操作,把所有下劃線變成別的名稱。在類定義階段就實現。特點: 1、外部無法直接obj.__attrname
2、在類內部__attrname是可以直接呼叫的
3、子類無法覆蓋父類__attrname 的屬性(名字都不一樣啦,加了類名)
...
b沒有bar(),查到class a執行,但是呼叫foo的時候其實是呼叫的class b的函式。為了在bar()絕對使用class a的foo函式, 因 此要用到封裝。
在外部無法直接接觸到隱藏的屬性,可以在class內部寫乙個介面提供視窗。但是這樣就規定了__name的格式。
class people:
def __init__(self,name,age):
self.__name = name
self.__age = age
def tell_info(self):
print('name: age:'%(self.__name,self.__age))
p = people('egon',18)
p.tell_info()
相同的道理,可以在class內部寫乙個介面修改隱藏屬性的資料。並且可以對輸入的資料進行驗證功能。
def set_info(self,name,age):
if not isinstance(name,str):
return
self.__name = name
self.__age = age
將複雜的方法封裝在內部。
使用者無需改變自己的使用方式。
python物件導向三大特性之封裝
封裝 類裡面不光有屬性還有方法。這種將屬性通過方法直接在類內部操作的形式就叫做封裝。把很多資料封裝到 個物件中,把固定功能的 封裝到 個 塊,函式,物件,打包成模組.這都屬於封裝的思想.封裝操作可以對受保護的成員進行功能開放的控制,達到保護資料不被非法訪問的目的。當然,方法也可以私有封裝,但是一般都...
python物件導向三大特性之封裝
封裝是物件導向三大特性最核心的乙個特性 封裝 整合 1 如何隱藏 在屬性名前加 字首,就會實現乙個對外隱藏屬性效果 該隱藏需要注意的問題 i 在類外部無法直接訪問雙下滑線開頭的屬性,但知道了類名和屬性名就可以拼出名字 類名 屬性,然後就可以訪問了,如foo.a n,所以說這種操作並沒有嚴格意義上地限...
Python物件導向三大特性之封裝
面向函式的程式設計和物件導向程式設計對比 通過函式和物件的方法實現同樣的功能,看起來是面向函式的程式設計比較簡單 假如是連線資料庫的增,刪,改,查操作使用物件導向的方法 更加簡單 vim day7 3.py usr bin python coding utf 8 def fetch 連線資料庫,ho...