物件導向之封裝

2022-09-17 15:12:15 字數 2721 閱讀 9535

封裝就是打包,封起來,裝起來

封裝資料:將資料隱藏起來這不是目的。隱藏起來然後對外提供操作該資料的介面,然後我們可以在介面附加上對該資料操作的限制,以此完成對資料屬性操作的嚴格控制。

封裝分為兩個層面

第乙個層面:物件能拿到類的東西,但是類能拿到物件的東西嗎?

class foo():

count = 0

print(count)

f = foo()

print(f.count) # 0

f.name = 'nick' # 對物件進行了封裝

print(foo.name)

第二個層面的:內部可以使用,外部不可以使用,在你需要封裝的屬性前面加上__
class people():

__love_people = 'male'

# print('in',love_people)

def __nawan(self):

print('nawan')

def __nakuaizi(self):

print('nakuaizi')

def __chifan(self):

print('chifan')

def chifan_all(self):

self.__nawan()

self.__nakuaizi()

self.__chifan()

# print('out',people.__f1)

property一般用在:本來是方法,但是他應該是屬性的時候,我們就應該property

class people():

def __init__(self,height,weight):

self.height = height

self.weight = weight

@property

def bmi(self):

return self.weight/(self.height**2)

peo = people(1.8,70)

print(peo.height)

# print(peo.bmi())

print(peo.bmi)

裝飾器用法(只在python3中使用)

class people():

def __init__(self,height,weight):

self.height = height

self.weight = weight

@property # 獲取值的時候觸發,你不需要加括號使用,不能加引數

def bmi(self):

return self.weight/(self.height**2)

@bmi.setter # 在修改bmi的時候觸發,必須得加引數

def bmi(self, value):

print(f'你已經成功修改為')

@bmi.deleter # 在刪除bmi的時候觸發,不能加引數

def bmi(self):

print('delter')

peo = people(1.8,70)

print(peo.bmi)

print('*'*50)

peo.bmi = 50

print('*'*50)

del peo.bmi

class oldboystudent:  # 類的定義階段,會執行**(牢記)

# 1 / 0

school = 'oldboy'

def __init__(self, id, name, age=15): # (******) # aaa是例項化的物件,自動傳值 # self=stu1 # self=stu2

self.id = id # stu1.id = id

self.name = name # stu1.name = name

self.age = age # stu1.age = age

def choose_course(self): # 約定俗成為self

# 1 / 0

print(id(self))

print(self.school)

print(self.id)

self.id += 1

print(f' is choosing course')

stu1 = oldboystudent(222222, '朱瑞星') # 每次例項化物件的時候都會自動呼叫__init__方法(排在第一位的)

# oldboystudent.choose_course(1111) # self = 1111

print('*' * 50)

stu1.choose_course() # self = <__main__.oldboystudent object at 0x000001c5ec999860>

print(stu1.id)

# 針對類而言:choose_course裡的self就是傳的引數

# 針對物件而言:choose_course裡的self就是物件本身

stu2 = oldboystudent(666666, '孔悟空', 19) # 每次例項化物件的時候都會自動呼叫__init__方法(排在第一位的)

# stu2.choose_course()

print(stu2.id)

物件導向之封裝

定義 影藏事物的屬性和實現的細節,僅對外提供公共的訪問方式 封裝的好處 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 外部無法訪問這其實是在類定義的時候,將變數名和函式名進行了變形,我們可以列印類...

物件導向之 封裝

封裝 就是把屬性或者方法裝起來 廣義 把屬性和方法裝起來,外面不能直接呼叫了,要通過類的名字來呼叫 狹義 把屬性和方法藏起來,外面不能呼叫,只能在內部偷偷呼叫 class user def init self,name,passwd self.usr name self.pwd passwd 私有的...