"""
"""
"""
封装:
定义:
1.从数据角度讲:
将一些基础变量复合为一个自定义类型。
比如:向量(x,y,z 模长等操作)
狗(姓名,年龄,拉臭臭)
不但可以准确的描述事物,还可以体现该事物的行为。
2.从行为角度讲:
向类外提供必要的功能,隐藏实现的细节。
使用者可以不必操心实现过程。
3.从设计角度讲:
(1) 分而治之:
-- 将一个大的需求分解为许多类,让每个类处理一个独立的功能。
-- 优点:便于分工,便于复用,可扩展性强。
(2) 封装变化
-- 需求可能会变化的功能要单独封装,避免影响其他类。
(3) 高内聚
-- 类中各个方法都在完成一项任务
(4) 低耦合
-- 类与类的关联性、依赖度要低
例如:活字印刷术(哪里错了,换哪里)
计算机硬件(哪里坏了,换哪里)
语法:
1.做法:命名使用双下划线开头
2.作用:修改变量名,让外界”不能直接访问”
3.本质:障眼法,也可以访问:
_类名__成员名
"""
"""
封装--私有化
私有化实例变量:在变量名称前,加入双下划线。
本质:修改了变量名称。
总结:
私有化变量:__名称
通过方法操作变量:set_名称
get_名称
"""
class Student:
"""学生类"""
# 类的设计者,限制该类对象只能有如下的实例变量(固定数量的实例变量,不能增加)
# 含有__slots__属性的类所创建的对象没有__dict__属性
__slots__ = ("__name","__age")
def __init__(self,name,age):
self.name=name
self.age=age
@property
def name(self):
return self.__name
@name.setter
def name(self,value):
self.__name=value
@property
def age(self):
return self.__age
@age.setter
def age(self,value):
if 20<=value<=30:
self.__age=value
else:
raise ValueError("好讨厌,不要")
s01=Student("new",25)
print(s01.name)
print(s01.__dict__)
print(dir(s01)) # 获取对象所有成员