0
点赞
收藏
分享

微信扫一扫

寒假python笔记day01

墨春 2022-01-10 阅读 185

封装

定义:

数据角度上讲:将一些基本数据类型复合成一个自定义类型
行为角度上讲:向类外提供必要的功能,隐藏实现的细节
设计角度上讲:
1、分而治之:将一个大的需求分解为许多类,每个类处理一个独立的功能
拆分的好处:便于分工,便于复用,可扩展性强
2、变则疏之:变化的地方独立包装,避免影响其他类
3、高内聚:类中各个方法都在一起完成一项任务,单一职责的类
4、低耦合:类与类之间关系的松散

知识点补充:

类名.dict()显示类的实例对象的全部属性,结果为字典类型

数据角度,将一个对象的所有属性封装成一个自定义的类`

class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def printf(self):
        print(self.name,self.age)
s=Student('小化',10)
s.printf()
print(s.__dict__)

行为角度:将一些属性设置为私有化(障眼法)

class Student:
    def __init__(self,name,age):
        self.name=name
        #将某个需要私有化的属性前面加两个下划线即可私有,但是只是障眼法
        self.set_age(age)#初始化年龄
    #获取年龄
    def get_age(self):
        return self.__age
    #设置年龄
    def set_age(self,value):
        self.__age=value
s=Student('小化',10)
#通过实例明._类名+属性还是可以访问该私有属性:所以私有化的属性实际上还是可以访问的到
s._Student__age=19
print(s._Student__age)
print(s.__dict__)

设计角度:使用property对象拦截直接用 实例名称.age 变量的直接读写操作

#实例的全部属性没有age而是__age(隐藏)
class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age #跳转到set_age方法

    #获取年龄
    def get_age(self):
        return self.__age
    #设置年龄
    def set_age(self,value):
        self.__age=value
    #利用property对象拦截直接用实例名称.age变量的直接读写操作
    #而是当直接利用 实例名.age时赋值跳转到set_age方法,读取时跳转到get_set方法
    age=property(get_age,set_age)
s=Student('小化',10)
print(s.age)#跳转到get_age方法
print(s.__dict__)
举报

相关推荐

0 条评论