面向对象的三大特性之一--封装

75 篇文章 2 订阅
66 篇文章 5 订阅
封装就是使用特殊的语法,对成员属性和成员方法进行包装,达到保护和隐藏的目的
但是一定注意,不能把成员全部封装死,就失去意义了
被封装的成员主要是供类的内部使用
被特殊语法封装的成员,会有不同的访问的权限

封装的级别
    成员   ==> 公有的
    _成员  ==> 受保护的 (约定俗成,而python没有具体实现)
    __成员 ==> 私有的
          公有的 public    受保护的 protected     私有的 private
在类的内部      OK              OK                 OK
在类的外部      OK              No(python可以)      No

了解即可:
在python中给成员进行私有化,其实就是改了成员的名字
私有化 ==> _类名__成员
class Person():
     # 成员属性
    name = None
    _sex = None # 在成员前面 加一个 _ 受保护的成员
    __age = None # 在成员前面 加两个 __ 私有的成员

     # 初始化方法
    def __init__(self,a,b,c):
        self.name = a
        self._sex  = b
        self.__age = c
    def _say(self):
        print('hello,world!')

    def __sing(self):
        print('lets together')

    def func(self):
         # 在类的内部可以操作任意成员
        print(self.__age)

    def __del__(self):
        print('its over')

jd = Person('jd','Girl',23,)
#属性调用:
# print(jd._sex)  # 输出:Girl
                  #  在类的外部不能操作 受保护的成员 (但是Python中可以)
# print(jd.__age)  # 输出报错:AttributeError: 'Person' object has no attribute '__age'
                 #  在类的外部不能操作  私有成员属性

# print(jd._Person__age) # 输出:23
                       # 可以使用特殊的语法获取私有成员

#函数调用:
# jd._say()  # 输出:hello,world! (_和__方法和调用属性方法是一致的)
# jd.__sing() # 输出报错:AttributeError: 'Person' object has no attribute '__sing'
jd.func() # 输出:可以通过内部调用来调用私有成员属性

# print(jd.__dict__) #获取当前对象的所有属性,如果将__init__注销,则返回一个空集合
# print(Person.__dict__)#可以获取当前类所有成员信息 输出:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值