提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
封装
文章目录
一、封装
示例: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
总结
类的封装