封裝 :就是把屬性或者方法裝起來
廣義 :把屬性和方法裝起來,外面不能直接呼叫了,要通過類的名字來呼叫
狹義 :把屬性和方法藏起來,外面不能呼叫,只能在內部偷偷呼叫
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 在定義類或者初始化物件時,在屬性前加 就會將該屬性隱藏起來,但是該隱藏...