面向對象三大特性之封裝

面向對象三大特性之封裝

一、什麼是封裝

封裝指的是將一堆屬性和方法封裝到對象中python

對象:比如一個袋子或容器,能夠存放一堆屬性和方法函數

二、爲何要用封裝

能夠經過 「 對象. 」 的方式存取屬性或方法code

對象擁有 「.」 的機制,方便數據的存取對象

三、如何封裝

經過類來進行封裝接口

class Foo:
    x = 10
    def func(self):
        print('方法')

t = Foo()
print(t.x) # 10
# 添加屬性
t.y = 20
print(t.y) # 20
t.func() # 方法

四、訪問限制機制(隱藏屬性和方法)

凡是類的內部定義的屬性或方法以__開頭的屬性或方法名,都會被限制訪問,外部不能「直接」訪問該屬性原型,內部能夠訪問get

做用:將一些隱私的數據隱藏起來,不讓外部輕易獲取,能夠經過接口將一堆數據封裝成一個接口,讓用戶經過接口進行一系列邏輯判斷最後將數據返回給用戶。原型

類裏要定義了以__開頭的要想訪問能夠經過如下方式訪問:it

_類名__屬性或方法名class

class Info:
    def __init__(self, name, age, ID):
        self.name = name
        self.__age = age # 本質是_Info__age
        self.__ID = ID # 本質是_Info__ID
    def paser_user(self,username,pwd):
        if username == 'shen' and pwd == '123':
            print(f'{self.name}, {self.__age}, {self.__ID}')
        else:
            print('無權限訪問')
fun = Info('shen',18,3239027328)
fun.paser_user('shen','123') # shen, 18, 3239027328
# 沒有__開頭的能夠直接訪問
print(fun.name) # shen
# 類內部有__開頭的沒法直接訪問
# print(fun.__age) # AttributeError: 'Info' object has no attribute '__age'
# 能夠經過_類名__屬性名獲取
print(fun._Info__age) # 18
class ATM:
    def __inster(self):
        print('插卡')
    def __pwd(self):
        print('輸入密碼')
    def __choice_money(self):
        print('取款金額')
    def __check_flow(self):
        print('查看流水')
    def withdraw(self):
        self.__inster()
        self.__pwd()
        self.__choice_money()
        self.__check_flow()
st = ATM()
# 外部不能直接訪問內部__開頭的方法,能夠經過封裝成一個接口訪問返回數據 
st.withdraw()
# 插卡
# 輸入密碼
# 取款金額
# 查看流水

五、property

property是python內置的一個裝飾器,能夠裝飾 「 在類內部的方法 」 之上將方法的調用方式由對象.方法()——>對象.方法容器

一、能夠將類中的函數 「 假裝成 」 對象的數據屬性

二、讓名詞的方法調用時更爲合理

class BIM:
    def __init__(self,name,height, weight):
        self.name = name
        self.height = height
        self.weigiht = weight
    # 在函數上面寫
    @property
    def get_bim(self):
        print(f'{self.name}的bim是: {self.weigiht / (self.height**2)}')
bim_obj = BIM('沈', 1.8, 61)
bim_obj.get_bim # 沈的bim是: 18.827160493827158
相關文章
相關標籤/搜索