Python面向对象三大特征之一封装
一.封装
1.什么是封装?
将客观事物封装成一个抽象的类,在类中将一些能够被用户访问到的属性和方法进行公开,将一些不想被用户访问到的属性和方法进行隐藏。公开的数据是所用类共有的属性和方法,类内类外都可以访问。隐藏的数据只能在类内进行访问,类外不可以访问。
2.为什么要封装?
(1)提高程序的安全性,降低后期维护程序的成本
(2)提高代码的复用性,减少代码量
二.属性隐藏
将一些不想被用户访问带的属性进行隐藏:
在属性名前面加两个下划线
代码如下:
class Person:
age = 20
def __init__(self,name):
self.name = name
self.__money = 100000 #将money进行隐藏
hz = Person('华子')
print(hz.name)
#print(hz.money) #会报错,因为访问不到
强制访问隐藏属性
写法:对象名._类名__属性名
class Person:
age = 20
def __init__(self,name):
self.name = name
self.__money = 100000 #将money进行隐藏
hz = Person('华子')
print(hz.name)
#print(hz.money) #会报错,因为访问不到
# 强制访问
print(hz._Person__money)
1.设置访问,修改,删除权限
注意:property必须设置访问权限,可以不设置修改和删除权限
在这里,我们可以在类中写一个接口函数去给用户设置访问,修改,删除的权限,我们会用到python内置的property函数
property(fget = None , fset = None , fdel = None)
# fget 是获取属性值的方法
# fset 是设置(修改)属性值的方法
# fdel 是删除属性值的方法
#property需要一个变量名,而且这个变量名会被作为属性名进行相应的操作
#所以变量名必须与所隐藏的属性一致
class Person:
age = 20
def __init__(self,name):
self.name = name
self.__money = 100000 #将money进行隐藏
#获取money属性值的方法
def get_money(self):
return self.__money
#修改money属性值的方法
def set_money(self,value):
self.__money = value
#删除money属性的方法
def del_money(self):
del self.__money
#property需要一个变量名,而且这个变量名会被作为属性名进行相应的操作
#所以变量名必须与所隐藏的属性一致
money = property(fget=get_money,fset=set_money,fdel=del_money)
hz = Person('华子')
print(hz.name)
print(hz.money) #正常访问
del hz.money #删除money属性
2.property装饰器设置用户权限
用法:
@property,设置访问权限,装饰的方法名会被作为属性名进行访问
@隐藏属性名.setter,设置修改权限
@隐藏属性名.deleter,设置删除权限
class Person:
age = 20
def __init__(self,name):
self.name = name
self.__money = 100000 #将money进行隐藏
#获取money属性值的方法
@property
def money(self):
return self.__money
#修改money属性值的方法
@money.setter
def money(self,value):
self.__money = value
#删除money属性的方法
@money.deleter
def money(self):
del self.__money
hz = Person('华子')
print(hz.name)
print(hz.money) #正常访问
del hz.money # 删除money属性