Python学习笔记(八)—— 私有属性、私有方法、伪私有

在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其在是在类的定义中。用下划线作为变量名和方法名的前缀和后缀来表示类的特殊成员。

  1. _xxx:这样的对象叫做保护成员,只有类对象和子类对象能访问这些成员。
  2. __xxx__:系统定义的特殊成员.
  3. __xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问这个成员,但在对象的外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。Python中不存在严格意义上的私有成员。

私有属性和私有方法

对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问。
格式:
在属性名或者方法名前增加两个下划线

class Women:
    def __init__(self,name):
        self.name = name
        self.__age = 20
    def secret(self):
        '''在对象的方法内部,可以访问对象的私有属性'''
        print("%s的年龄是%d"%(self.name,self.__age))
    def __secret1(self):
        print("%s的年龄是%d"%(self.name,self.__age))
        
danni = Women("小美")
# 私有属性,在外界不能被直接访问,否则程序会报错。
#print(danni.__age)
danni.secret()

#私有方法,同样不允许在外界直接访问
danni.__secret1()

父类的私有属性和私有方法

1.子类对象不能在自己的方法内部,直接访问父类的私有属性或私有方法

class A:
    def __init__(self):
        self.num1 = 1
        self.__num2 = 2

    def __test(self):
        print("私有方法")
class B(A):
    def demo(self):
        # 1.在子类的对象方法中,不能访问父类的私有属性
        print("访问父类的私有属性%d" %self.num2)
        # 2.在子类内部不能调用父类的私有方法
        self.__test()
c = B()
c.demo()

报错

2.子类对象可以通过父类的公有方法间接访问到私有属性或私有方法。

class A:
    def __init__(self):
        self.num1 = 1
        self.__num2 = 2

    def __test(self):
        print("父类的私有方法")

    def test(self):
        '''在自己的公有方法中调用自己的私有属性'''
        print("公有方法")
        print(self.__num2)
        self.__test()
class B(A):
    def demo(self):
        # 访问父类的公有属性
        print("子类方法%d" % self.num1)
        # 调用父类法公有方式
        self.test()

c = B()
c.demo()

结果:
子类方法1
公有方法
2
父类的私有方法

但是很想访问私有成语怎么办???

伪私有

在名称前面加_类名即变成了_类名__名称。名称指的是属性或者方法

class Women:
    def __init__(self,name):
        self.name = name
        self.__age = 20
    def secret(self):
        '''在对象的方法内部,可以访问对象的私有属性'''
        print("%s的年龄是%d"%(self.name,self.__age))
    def __secret1(self):
        print("%s的年龄是%d"%(self.name,self.__age))
        
danni = Women("小美")
# 私有属性,在外界不能被直接访问
print(danni._Women__age)
danni.secret()

#私有方法,同样不允许在外界直接访问
danni._Women__secret1()

小结:
既然时私有的,也不想让外界访问,所以,上述的方法不建议使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小曾同学.com

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

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

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

打赏作者

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

抵扣说明:

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

余额充值