python笔记day01

一、封装

1、定义:

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

2、知识点补充:

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

1、数据角度

将一个对象的所有属性封装成一个自定义的类

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__)
2、行为角度

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

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__)
3、设计角度

使用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__)

方法二:
class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age #跳转到age方法

    @property #创建property对象,只负责拦截读取操作
    def age(self):
        return self.__age
    @age.setter
    def age(self,value):#只负责拦截写入操作
        self.__age=value
s=Student('小化',10)
print(s.age)#跳转到get_age方法
print(s.__dict__)
4、练习
#小明去招商银行取钱
class Person:
    def __init__(self,name):
        self.name=name
    @property
    def name(self):
        return self.__name;
    @name.setter
    def name(self, name):
        self.__name = name

class Bank:
    def __init__(self,name):
        self.name=name
    @property
    def name(self):
        return self.__name;
    @name.setter
    def name(self,name):
        self.__name=name
    def draw_money(self,person):
        print(person.name+"去"+self.name+"取钱")

p=Person("小明")
b=Bank("招商银行")
b.draw_money(p)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

废材终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值