18.python类属性和方法的保护和私有化

结论:

"_“和” _ _"的使用 更多的是一种规范/约定,并没有真正达到限制的目的:

“_”:以单下划线开头的表示的是protected类型的变量,即只能允许其本身与子类对象直接进行访问;
“__”:双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了,连子类也不可以,这类属性在运行时属性名会加上单下划线和类名。

当使用"from moduleNmae import *"时,不会将以一个下划线开头的对象和两个下划线开通的对象引入

# coding=utf-8
__author__ = 'Wang'

class Baseclass(object):
    a = "aa"
    _b = "bb"
    __c = "cc"

    def __init__(self, d, e, f):
        self.d = d
        self._e =e
        self.__f =f

    def _show1(self):#######1.所有的变量使用类的方法都可以访问
        print self.a
        print self._b
        print self.__c
        print self.d
        print self._e
        print self.__f

    def __show2(self):
        print self.a
        print self._b
        print self.__c
        print self.d
        print self._e
        print self.__f

class Subclass(Baseclass):
    def __init__(self, d, e, f):
        super(Subclass, self).__init__(d, e, f)
        self.a="gg"

    def _get(self):#######2.子类的方法也可以直接访问
        print self.a
        print self._b
        print self.__c
        print self.d
        print self._e
        print self.__f
if __name__ == "__main__":
    print "******1111***********"
    object = Baseclass("dd", "ee", "ff")
    print object.a
    print object._b
    print object.d    ##########实例可以访问类属性
    print object._e   ##########实例可以访问类属性
    # print object.__c  ###实例不能直接访问带__的类属性
    # print object.__f  ###实例不能直接访问带__的变量
    print (object._Baseclass__c)#####实例+下划线+类名+变量名访问
    print (object._Baseclass__f)####实例+下划线+类名+变量名访问
    print "******2222***********"
    print Baseclass.a
    print Baseclass._b
    # print Baseclass.d    ##########类不能访问实例属性
    # print Baseclass._e   ##########类不能访问实例属性
    print (Baseclass._Baseclass__c)##类名+下划线+类名+变量名访问
    # print (Baseclass._Baseclass__f) #####类不能访问实例属性
    print "******3333***********"
    object._show1()
    print "######4444###########"
    object._Baseclass__show2()
    print "######5555###########"
    object2 = Subclass("dd", "ee", "ff")
    print object2.a
    print object2._b
    print object2.d    ##########实例可以访问类属性
    print object2._e   ##########实例可以访问类属性
    print (object2._Baseclass__c)###子类实例+下划线+类名+变量名访问
    print (object2._Baseclass__f)###子类实例+下划线+类名+变量名访问
    print "******6666***********"
    print Subclass.a
    print Subclass._b
    # print Baseclass.d    ##########类不能访问实例属性
    # print Baseclass._e   ##########类不能访问实例属性
    print "######77777###########"

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值