封装指的是将一堆属性和方法封装到对象中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是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