Python面向对象之封装

一.封装

1.什么是封装?

将客观事物封装成一个抽象的类,在类中将一些能够被用户访问到的属性和方法进行公开,将一些不想被用户访问到的属性和方法进行隐藏。公开的数据是所用类共有的属性和方法,类内类外都可以访问。隐藏的数据只能在类内进行访问,类外不可以访问。

2.为什么要封装?

(1)提高程序的安全性,降低后期维护程序的成本

(2)提高代码的复用性,减少代码量

二.属性隐藏

将一些不想被用户访问带的属性进行隐藏:
在属性名前面加两个下划线

代码如下:

class Person:
    age = 20
    def __init__(self,name):
        self.name = name
        self.__money = 100000    #将money进行隐藏
        
        
hz = Person('华子')
print(hz.name)
#print(hz.money)     #会报错,因为访问不到

在这里插入图片描述

强制访问隐藏属性

写法:对象名._类名__属性名

class Person:
    age = 20
    def __init__(self,name):
        self.name = name
        self.__money = 100000    #将money进行隐藏
        
        
hz = Person('华子')
print(hz.name)
#print(hz.money)     #会报错,因为访问不到
# 强制访问
print(hz._Person__money)

1.设置访问,修改,删除权限

注意:property必须设置访问权限,可以不设置修改和删除权限
在这里,我们可以在类中写一个接口函数去给用户设置访问,修改,删除的权限,我们会用到python内置的property函数

property(fget = None , fset = None , fdel = None)

# fget 是获取属性值的方法
# fset 是设置(修改)属性值的方法
# fdel 是删除属性值的方法

#property需要一个变量名,而且这个变量名会被作为属性名进行相应的操作
#所以变量名必须与所隐藏的属性一致
class Person:
    age = 20
    def __init__(self,name):
        self.name = name
        self.__money = 100000    #将money进行隐藏
    #获取money属性值的方法
    def get_money(self):
        return self.__money
    #修改money属性值的方法
    def set_money(self,value):
        self.__money = value
    #删除money属性的方法
    def del_money(self):
        del self.__money

    #property需要一个变量名,而且这个变量名会被作为属性名进行相应的操作
    #所以变量名必须与所隐藏的属性一致
    money = property(fget=get_money,fset=set_money,fdel=del_money)

hz = Person('华子')
print(hz.name)
print(hz.money)  #正常访问
del hz.money    #删除money属性

在这里插入图片描述

2.property装饰器设置用户权限

用法:

@property,设置访问权限,装饰的方法名会被作为属性名进行访问
@隐藏属性名.setter,设置修改权限
@隐藏属性名.deleter,设置删除权限
class Person:
    age = 20
    def __init__(self,name):
        self.name = name
        self.__money = 100000    #将money进行隐藏
    #获取money属性值的方法
    @property
    def money(self):
        return self.__money

    #修改money属性值的方法
    @money.setter
    def money(self,value):
        self.__money = value

    #删除money属性的方法
    @money.deleter
    def money(self):
        del self.__money

hz = Person('华子')
print(hz.name)
print(hz.money)     #正常访问
del hz.money     # 删除money属性

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

^~^前行者~~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值