python物件導向三大特性之封裝

2022-04-10 20:21:53 字數 1972 閱讀 2147

封裝是物件導向三大特性最核心的乙個特性

封裝<->整合

1、如何隱藏:在屬性名前加__字首,就會實現乙個對外隱藏屬性效果

該隱藏需要注意的問題:

i:在類外部無法直接訪問雙下滑線開頭的屬性,但知道了類名和屬性名就可以拼出名字:_類名__屬性,然後就可以訪問了,如foo._a__n,

所以說這種操作並沒有嚴格意義上地限制外部訪問,僅僅只是一種語法意義上的變形。

class foo:

__x = 1 # _foo__x

def __f1(self): # _foo__f1

print('from test')

print(foo.__dict__)

print(foo._foo__x)

print(foo._foo__f1)

ii:這種隱藏對外不對內,因為__開頭的屬性會在檢查類體**語法時統一發生變形

class foo:

__x = 1 # _foo__x = 1

def __f1(self): # _foo__f1

print('from test')

def f2(self):

print(self.__x) # print(self._foo__x)

print(self.__f1) # print(self._foo__f1)

print(foo.__x)

print(foo.__f1)

obj=foo()

obj.f2()

iii: 這種變形操作只在檢查類體語法的時候發生一次,之後定義的__開頭的屬性都不會變形

class foo:

__x = 1 # _foo__x = 1

def __f1(self): # _foo__f1

print('from test')

def f2(self):

print(self.__x) # print(self._foo__x)

print(self.__f1) # print(self._foo__f1)

foo.__y=3

print(foo.__dict__)

print(foo.__y)

class foo:

__x = 1 # _foo__x = 1

def __init__(self,name,age):

self.__name=name

self.__age=age

obj=foo('egon',18)

print(obj.__dict__)

print(obj.name,obj.age)

2、為何要隱藏?

i、隱藏資料屬性"將資料隱藏起來就限制了類外部對資料的直接操作,然後類內應該提供相應的介面來允許類外部間接地運算元據,介面之上可以附加額外的邏輯來對資料的操作進行嚴格地控制:

設計者:egon

class people:

def __init__(self, name):

self.__name = name

def get_name(self):

通過該介面就可以間接地訪問到名字屬性

print('不讓看')

print(self.__name)

def set_name(self,val):

if type(val) is not str:

print('必須傳字串型別')

return

self.__name=val

使用者:lance

obj = people('egon')

print(obj.name) # 無法直接用名字屬性

obj.set_name('pipi')

obj.set_name(123123123)

obj.get_name()

ii、隱藏函式/方法屬性:目的的是為了隔離複雜度

python物件導向三大特性之封裝

封裝 類裡面不光有屬性還有方法。這種將屬性通過方法直接在類內部操作的形式就叫做封裝。把很多資料封裝到 個物件中,把固定功能的 封裝到 個 塊,函式,物件,打包成模組.這都屬於封裝的思想.封裝操作可以對受保護的成員進行功能開放的控制,達到保護資料不被非法訪問的目的。當然,方法也可以私有封裝,但是一般都...

Python物件導向三大特性之封裝

面向函式的程式設計和物件導向程式設計對比 通過函式和物件的方法實現同樣的功能,看起來是面向函式的程式設計比較簡單 假如是連線資料庫的增,刪,改,查操作使用物件導向的方法 更加簡單 vim day7 3.py usr bin python coding utf 8 def fetch 連線資料庫,ho...

python物件導向三大特性

定義 封裝一些資料和方法,只給外界提供必要的功能,掩蓋細節,提高 復用性和系統安全性。資料角度 用乙個類包裝多個變數,還可以定義方法,運算元據 行為角度 不同程式設計師開發乙個專案的不同功能,在使用時,直接呼叫,不需要思考其內部實現 設計角度 1 分而治之 拿到需求之後,分析需求,將需求拆解為不同的...