python学习之封装
python学习之封装
定义
封装是面向对象的三大特征之一
封装指的是隐藏对象中不希望被外部直接访问的属性或方法
# 实例:
class Dog():
def __init__(self,name):
self.name = name
# 现在在外部可以直接传入以及修改name属性
a = Dog('小白')
a.name = '小黑'
print(a.name)
通过隐藏属性的方法,修改为外部无法知道的命名
class Dog():
def __init__(self,name):
# self.name = name
# 修改属性名称
self.hiddend_name = name
a = Dog('小白')
a.name = '小黑'
print(a.name)
通过提供getter和setter方法使外部可以访问内部属性
class Dog():
def __init__(self,name):
self.name = name
self.hiddend_name = name
def get_name(self):
# 返回hiddend_name属性
return self.hiddend_name
def set_name(self,name):
# 修改name属性的值
self.hiddend_name = name
# 创建实例
a = Dog('小白')
# 输出name属性
print('修改前:' + a.get_name())
# 修改name属性
a.set_name('小黑')
print('修改后:' + a.get_name)
# 封装增加了代码的复杂程度,但提高了安全性,可以对数据进行验证。
设置属性为隐藏属性
# 为对象的属性使用双下划线开头__xxx,双下划线开头的属性是隐藏属性,只能在类的内部使用
# python自动将属性名称进行修改为:__name = _Dog_name
# 一般情况下可以设置单下划线_name
property装饰器
#peoperty装饰器
# 使用property装饰器将一个get方法转换为属性,可以像调用属性一样使用
# 名称必须与属性名称一致
class Dog():
def __init__(self,name):
self._name = name
# 格式,get方法添加@property
@property
def name(self):
# 返回name属性
return self._name
# set方法为@属性名.setter
@name.setter
def name(self,name):
# 修改name属性的值
self._name = name
# 创建对象
a = Dog('小白')
# 使用a.name输出name属性
print('现在的名字:',a.name)
# 修改name属性再输出
a.name = '哮天犬'
print('修改后:' + a.name)
点点滴滴,积少成多,终有一日能发挥用处。