06_02、面向对象的特征一:封装
2022/2/15 23:12:02
本文主要是介绍06_02、面向对象的特征一:封装,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、隐藏属性
1、为什么要隐藏属性
定义属性就是为了使用,所以隐藏并不是目的,隐藏属性的目的在于限制类外部对数据的直接操作
然后类内应该提供相应的接口来允许类外部间接地操作数据
接口之上可以附加额外的逻辑来对数据的操作进行严格地控制
这就是隐藏属性和开放接口的意义
2、如何隐藏属性
Python的Class机制采用双下划线开头的方式将属性隐藏起来,
类属性、对象属性、方法属性都可以隐藏
类中所有双下滑线开头的属性都会在类定义阶段、检测语法时自动变成“_类名__属性名”的形式
隐藏属性对外不对内(对外隐藏,对内不隐藏)
可以通过类属性查看: 类名.__dict__
# 隐藏属性 class Student(): # 隐藏类属性 __country = 'CHINA' # _Student__country def __init__(self, name, age): # 隐藏对象属性 self.__name = name # _Student__name self.age = age # 隐藏方法属性 def __func(self): # _Student__func print('from func') print(Student.__dict__)
二、开放接口
# 开放接口,返回类内部的隐藏属性值,并且可以增加限制 class Student(): # 学生类 __country = 'CHINA' # 类属性 # 初始化方法,自定义对象属性 def __init__(self, name, age): # 隐藏对象属性 self.__name = name # _Student__name self.age = age # 隐藏方法属性 def __func(self): # _Student__func print('from func') # 开放接口,返回隐藏的类的属性值 def get_country(self): return self.__country # self._Student__country # 增设限制 def set_country(self, v): if not type(v) is str: print('不是str') return self.__country = v print(Student.__dict__)
三、property装饰器
Python专门提供的一个装饰器property,可以将类中的函数“伪装成”对象的数据属性
对象在访问该特殊属性时会触发功能的执行,然后将返回值作为本次访问的结果
使用property有效地保证了属性 访问 的一致性,另外property还提供 设置 和 删除 属性的功能
# property 装饰器 class Student(): # 隐藏类属性 __country = 'CHINA' # 自定义对象属性 def __init__(self, name, age): # 隐藏对象属性 self.__name = name # _Student__name self.age = age # 隐藏方法属性 def __func(self): # 可以通过_Student__func调用 print('from func') # 通过@property把函数伪装成属性 # 该特殊属性作为接口,返回了原来的隐藏属性的值 @property def country(self): return self.__country # 可以通过self._Student__country查看 # property提供的设置功能(改的操作) @country.setter def country(self, v): if not type(v) is str: return self.__country = v # property提供的删除属性 @country.deleter def country(self): del self.__country stu = Student('tom', 18) # 实例化,产生stu对象 print(stu.country) # 通过 对象名.特殊属性名 调用 stu.country = 'xxx' # 修改属性值 # print(stu.country) del stu.country # 删除属性值
补充:property的第二种使用方法
class Student(): __country = 'CHINA' def __init__(self, name, age): self.__name = name # _Student__name self.age = age def __func(self): # _Student__func print('from func') def get_country(self): return self.__country # self._Student__country def set_country(self, v): if not type(v) is str: return self.__country = v def del_country(self): del self.__country country = property(get_country, set_country, del_country) stu = Student('tom', 18) # 查 stu.country = 'American' # 改 del stu.del_country # 删
这篇关于06_02、面向对象的特征一:封装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南