python---封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


封装

一、封装

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
面向对象的三大特征:封装、继承、多态(python无真
正意义上的多态)
封装:把功能代码,数据打包藏起来,需要用到的时候
就调用,提高程序安全性
ATM:选择取款,输入取款金额,用户是不知道ATM内部
具体是如何实现取款操作
把属性以及方法放到类里面,对这些属性以及方法的调
用修改等通过类来进行操作,
通过封装,可以把一些不想给用户看到的隐藏,提高程
序安全性
变量–暂存数据
函数–把具备某一些功能的代码块封装起来
模块–把具备一些具体功能的函数打包起来
包—把模块打包

二、属性隐藏

在类中定义一些不想被公开的数据 , 可以将数据进行隐
藏;在属性名前面加上两个下划线,隐藏的属性只能在
类内部进行访问。
Python中没有绝对的隐藏,改变一个访问方式就可以进
行访问了

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
tao=bank(10001,123456,600000000)
print(tao.__pw)

结果
在这里插入图片描述
此时无法访问密码

2.1访问隐藏的数据

主要有三种方法

2.1.1在类的内部直接访问

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
    def get_pw(self):
        print(self.__pw)

结果

2.1.2 对象名.__dict__和 对象._类名__属性名

通过"dict"能打印对象的所有属性(包括隐藏的属性)

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
tao=bank(10001,123456,600000000)
print(tao.__dict__)

结果
对象._类名__属性名

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
tao=bank(10001,123456,600000000)
print(tao._bank__pw)

结果

2.1.3修改隐藏属性的方法来去对隐藏属性进行访问

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
    def get1(self):
        return self.__pw
tao=bank(10001,123456,600000000)
print(tao.get1())

结果

2.1.4修改隐藏属性的方法

在类里面写一个函数重新设置

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
    def My_Reset(self,rpw):
        self.__pw=rpw
    def get1(self):
        return self.__pw
tao=bank(10001,123456,600000000)
print(tao.get1())
tao.My_Reset(654321)
print(tao.get1())

结果

2.2隐藏方法

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
     def __My_print(self):
        print(self.__pw)
        print(self.__money)
tao=bank(10001,123456,600000000)
tao.__My_print()

结果

三、property()函数

property可以设置、获取、删除对象属性,可以限制用
户对属性的获取(访问)与设置(修改)

property(fget = None, fset = None, fdel =
None)
fget 获取对象属性值的方法
fset 设置/修改对象属性值的方法
fdel 删除对象属性值的方法
fget是必须存在的,当fget为none,fset和fdel可以
不写
此时隐藏属性可以被访问但是不能修改

class bank:
    def __init__(self,id,pw,money):
        self.id=id
        self.__pw=pw
        self.__money=money
    def get1(self):
        return self.__pw
    def get2(self):
        return self.__money
    pw=property(fget=get1)
    money=property(fget=get2)
tao=bank(10001,123456,600000000)
print(tao.pw)

四、property()装饰器

代理属性,被装饰的方法会被当做属性来操作,方法名
必须跟属性名一致
一般当有隐藏属性的时候才用property函数以及
property装饰器
@property 装饰访问隐藏属性
@属性名.setter 装饰设置(修改)属性值的方法
@属性名.deleter 装饰删除属性值的方法

class bank:
    def __init__(self,id,money):
        self.id=id
        self.__pw=123456
        self.__money=money

    @property
    def get1(self):
        print(self.__pw)

    @get1.setter
    def get1(self,a):
        self.__pw+=a
        print(self.__pw)

    @get1.deleter
    def get1(self):
        del self.__pw

tao=bank(10001,600000000)
tao.get1
tao.get1=50

总结

类的封装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值