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)

posted @ 2021-10-26 14:06  骑着蜗牛路过你的风景  阅读(134)  评论(0编辑  收藏  举报