python类的三大特性——封装

本文介绍了Python类的封装概念,包括封装的目的和益处,如保护数据、提高代码复用性和安全性。详细讲解了如何实现封装,如使用私有变量和私有方法,并探讨了property属性,解释了其将方法转化为属性的用法,以及两种使用property的装饰器方式和类属性方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、封装的概念

封装:指隐藏对象的属性和实现细节,不允许外部直接方位对象内部的信息,仅仅提供公共的访问方式给外部,实现外部对内部的操作和访问。

二、封装的目的和益处

封装的目的

  • 保护隐私数据和方法,明确内外区分。
  • 隔离复杂的实现方法
    例如:一个电视机,只提供几个按钮和一个遥控器给用户操作,并不需要知道电视机所有的内部信息和设计。

封装的益处

  • 便于使用
  • 提高代码的复用性
  • 隔离变化和复杂性
  • 提高安全性

三、封装的方法

1、私有变量

python中采用双下划线开头的方式将变量设置为私有变量,即“__XXX”
私有变量的特点:

  • “__XXX”这种私有变量只有类内部可以使用,例如self.__XXX,外部无法访问,即使使用__XXX这种形式。
  • 子类无法覆盖父类定义的私有变量。
class P(object):
    def __init__(self):
        self.__A = 10
        self.A = 0
    def p(self):
        print('%d ' % self.__A)
        print('%d ' % self.A)
p = P()
p.p()
>>>
10 
0 

2、私有方法

没有定义私有方法时,子类会重写父类的方法:

class Animal(object):
    def bak(self):
        print('bak')
    def test(self):
        self.bak()
class Dog(Animal):
    def bak(self):
        print('汪汪')
d = Dog()
d.test()
>>>
汪汪

定义私有方法时,子类无法重写父类的方法:

class Animal(object):
    def __bak(self):
        print('bak')
    def test(self):
        self.__bak()
class Dog(Animal):
    def __bak(self):
        print('汪汪')
d = Dog()
d.test()
>>>
bak

四、property属性

1、property的概念和目的

  • property属性:一种特殊的属性,可以将类中的方法变成同名的属性,可以用属性的方式来访问该方法。
  • property属性特点
    • 定义时,在方法前添加@property装饰器,且仅有一个self参数。
    • 调用该方法时,用属性方式调用,不需要加括号。
  • 使用property属性的目的:使用property属性之后,调用方法时,直接得到该结果,无法知悉方法本身细节。

2、property两种使用方式

  • property装饰器方式
    在类的实例方法之前添加@property装饰器。
    在python3 中,该装饰器有三种形式,

  • @property 相当于调用函数,类似于“读”

  • @xxx.setter 相当于可以输入参数的调用参数,类似于“写”

  • @xxx.deleter 相当于调用函数可以进行删除操作等,类似于“删”

class Person(object):
    def __init__(self, name):
        self.__name = name
    # python3 中才有property的@xxx.setter,@xxx.deleter形式
    @property  # 读
    def name(self):
        print(self.__name)
    @name.setter  # 写
    def name(self, name1):
        self.__name = name1
        print(self.__name)
    @name.deleter  # 删除
    def name(self):
        print(None)
p = Person('Tom')
p.name
p.name = 'Jack'
del p.name
>>>
Tom
Jack
None
  1. property类属性方式
    property()函数有四个参数:
    property(get_XXX, set_XXX, del_XXX, “doc_description”)
  • 第一个,方法名, 调用方法:对象.属性
  • 第二个,方法名, 调用方法:对象.属性 = xxx
  • 第三个,方法名, 调用方法:del 对象.属性
  • 第四个,字符串, 调用方法:对象.属性.doc ,属性的描述
class Person(object):
    def __init__(self, name):
        self.__name = name
    def name(self):
        print(self.__name)
    def set_name(self,name1):
        self.__name = name1
        print(self.__name)
    def del_name(self):
        print(None)
    NAME = property(name, set_name, del_name)
p = Person('Tom')
p.NAME
p.NAME = 'Jack'
del p.NAME
>>>
Tom
Jack
None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值