物件導向之 封裝

2022-08-27 14:57:09 字數 3053 閱讀 2317

封裝 :就是把屬性或者方法裝起來

廣義 :把屬性和方法裝起來,外面不能直接呼叫了,要通過類的名字來呼叫

狹義 :把屬性和方法藏起來,外面不能呼叫,只能在內部偷偷呼叫

class user:

def __init__(self,name,passwd):

self.usr = name

self.__pwd = passwd # 私有的例項變數/私有的物件屬性 (在變數名前加__)

alex = user('alex','sbsbsb')

print(alex.__pwd) # 報錯

print(alex.pwd) # 報錯

#給乙個名字前面加上了雙下劃線的時候,這個名字就變成了乙個私有的

# 所有的私有的內容或者名字都不能在類的外部呼叫,只能在類的內部使用了

class user:

def __init__(self,name,passwd):

self.usr = name

self.__pwd = passwd # 私有的例項變數/私有的物件屬性

def get_pwd(self): # 表示的是使用者不能改只能看 私有 + 某個get方法實現的

return self.__pwd

def change_pwd(self): # 表示使用者必須呼叫我們自定義的修改方式來進行變數的修改 私用 + change方法實現

pass

alex = user('alex','sbsbsb')

print(alex.get_pwd()) #sbsbsb

class user:

__country = 'china' # 私有的靜態變數

def func(self):

print(user.__country) # 在類的內部可以呼叫

# print(user.country) # 報錯 在類的外部不能呼叫

# print(user.__country)# 報錯 在類的外部不能呼叫

user().func()

import  hashlib

class user:

def __init__(self,name,passwd):

self.usr = name

self.__pwd = passwd # 私有的例項變數

def __get_md5(self): # 私有的繫結方法

md5 = hashlib.md5(self.usr.encode('utf-8'))

md5.update(self.__pwd.encode('utf-8'))

return md5.hexdigest()

def getpwd(self):

return self.__get_md5()

alex = user('alex','sbsbsb')

print(alex.getpwd())

# 所有的私有化都是為了讓使用者不在外部呼叫類中的某個名字

# 如果完成私有化 那麼這個類的封裝度就更高了 封裝度越高各種屬性和方法的安全性也越高 但是**越複雜

# 加了雙下劃線的名字為啥不能從類的外部呼叫了?

class user:

__country = 'china' # 私有的靜態變數

__role = '法師' # 私有的靜態變數

def func(self):

print(self.__country) # 在類的內部使用的時候,自動的把當前這句話所在的類的名字拼在私有變數前完成變形

print(user._user__country)

print(user._user__role)

__country -->'_user__country': 'china'

__role -->'_user__role': '法師'

user.__aaa = 'bbb' # 在類的外部根本不能定義私有的概念

# 私有的內容能不能被子類使用呢? 不能

class foo(object):

def __init__(self):

self.func()

def func(self):

print('in foo')

class son(foo):

def func(self):

print('in son')

son()#in son

------------------------------------

class foo(object):

def __init__(self):

self.__func()

def __func(self):

print('in foo')

class son(foo):

def __func(self):

print('in son')

son()#in foo

-------------------------------------

class foo(object):

def __func(self):

print('in foo')

class son(foo):

def __init__(self):

self.__func()

son()

#attributeerror: 'son' object has no attribute '_son__func'

# 在其他語言中的資料的級別都有哪些?在python中有哪些?

# public 公有的 類內類外都能用,父類子類都能用 python支援

# protect 保護的 類內能用,父類子類都能用,類外不能用 python不支援

# private 私有的 本類的類內部能用,其他地方都不能用 python支援

物件導向之封裝

定義 影藏事物的屬性和實現的細節,僅對外提供公共的訪問方式 封裝的好處 1.隱藏了事物的細節 2.提高了 的復用性 3.提高了安全性 封裝的實現 使用private關鍵字進行修飾,被private修飾的成員只能在本類中使用 setter和getter 封裝需要搭配set和get方法 set 設定器 ...

物件導向之封裝

封裝之如何隱藏屬性 在變數名和方法名之前加雙下劃線 外部就訪問不到 classa x 1def init self,name self.name name def bar self print self.name a.x 外部無法訪問這其實是在類定義的時候,將變數名和函式名進行了變形,我們可以列印類...

物件導向之封裝

toc 一 封裝 1 什麼是封裝?封裝是類的三大特性,封裝就是把功能和資料整合在一起?2 為什麼要有封裝?以為封裝能讓 整合度更高 3 如何使用封裝?直接定義使用即可 在封裝的基礎上,我們可以將裝到物件或者類中的屬性隱藏起來 1 在定義類或者初始化物件時,在屬性前加 就會將該屬性隱藏起來,但是該隱藏...