【Python】面向对象,封装
发布日期:2021-05-07 23:12:41 浏览次数:10 分类:原创文章

本文共 2136 字,大约阅读时间需要 7 分钟。

封装来了:封装是啥?封装就好像把你需要的东西装到盒子里然后用封口胶把空封起来。照这种逻辑看,封装=“隐藏”。

哪在Python中怎么看出来隐藏呢?

在Python中用双下划线开头的方式将属性隐藏起来(设置成私有的)

类中所有双下划线开头的都会自动变形成:__类名__x的形式

"""就是把函数跟方法给封装起来定义里两个类,封装"""class xiaoxin:    __A="shimmer"#类的数据属性一个是共享的,但是语法上可以是把类的数据属性设置成私有的如_xiaoxin__A    def __Foo(self):        print("from xiaoxin")    def bar(self):        self.__Foo()#只有在类的内部才能被访问到class xiaoting(xiaoxin):    def __FOO(self):        print("from xiaoting")d=xiaoting()d.bar()

在这里插入图片描述
注意:
1、这种机制也并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如a._A__N
2、变形的过程只在类的定义是发生一次,在定义后的赋值操作,不会变形
3、在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的

封装的意义:

#一:封装数据属性:明确的区分内外,控制外部对隐藏的属性的操作行为

class  People:    def __init__(self,name,age):        self.__name=name        self.__age=age    def tell_info(self):        print("name: %s,age: %s"%(self.__name,self.__age))    def set_info(self,name,age):        if not isinstance(name,str):            print("姓名需要为字符串类型!!!")        if not isinstance(age,int):            print("年龄需要为整型!!!")        self.__name=name        self.__age=agep=People("shimmer",21)p.tell_info()p.set_info("EGON",38)p.set_info(38,"EGON")p.set_info(111,222)

#二、 封装方法:隔离复杂度

class ATM:    def __card(self):        print("插卡")    def __auth(self):        print("用户认证")    def __input(self):        print("输入取款金额")    def __print_bill(self):        print("打印账单")    def __take_money(self):        print("取款")    def withdraw(self):        self.__card()        self.__auth()        self.__input()        self.__print_bill()        self.__take_money()a=ATM()a.withdr

3:封装也能体现面向对象的可扩展性高这一点

"""定义一个房类:有长宽高,拥有者,类型"""class Room:    def __init__(self,name,owner,length,width,height):        self.name=name        self.owner=owner        self.__length=length        self.__width=width        self.__height=height    def area(self):#对外提供的接口,隐藏了内部的实现细节,此时我们想求的是面积        res=self.__length*self.__width*self.__height        print(res)    def info(self):       print("房子类型:%s"%self.name)d=Room("两房一厅","shimmer",10,20,10)d.area()#使用者调用接口d.info()

直接从内部定义函数方法,给外部提供接口进行访问。

封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者的代码;而外部使用用者只知道一个接口(函数),只要接口(函数)名、参数不变,使用者的代码永远无需改变。这就提供一个良好的合作基础——或者说,只要接口这个基础约定不变,则代码改变不足为虑。

上一篇:接口又是个啥?
下一篇:【Python】面向对象:多态,多态性

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月25日 12时32分38秒