python中的访问控制

1. __xxx__ 类的一些特殊方法和属性,public

2. __xx 私有属性,代码预处理过程会将其转化为_className__xx,可以用预处理后的名字访问,用预处理前的名字访问会报错;

3. _xx 直接在文件中定义的这种命名方式的全局变量,类和方法 不会被from xx import * 导入;


__xx

class A(object):
    _name = "this is  A's name"
    __age = 25
    def __func(self):
        print self.__age

class _B():
    name = "this is B's name"


if __name__ == '__main__':
    a = A()
    print a._name
    print a._A__age
    print a.__age


output:

Traceback (most recent call last):
this is  A's name  <span style="color:#ff0000;"># <span style="font-family: Arial, Helvetica, sans-serif;"> a._name</span></span>

  File "D:/lsc/study/python code/test.py", line 15, in <module>
25 # <span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#ff0000;">a._A__age</span></span>
    print a.__age
AttributeError: 'A' object has no attribute '__age' <span style="color:#ff0000;"># <span style="font-family: Arial, Helvetica, sans-serif;">print a.__age</span></span>

_xx

text.py

class A(object):
    _name = "this is  A's name"
    __age = 25
    def __func(self):
        print self.__age

class _B():
    name = "this is B's name"


if __name__ == '__main__':
    a = A()
    print a._name
    print a._A__age
    print a.__age

test2.py

from test import *


if __name__ == '__main__':
    a = A()
    print a._name
    print a.__age


output

this is  A's name
Traceback (most recent call last):
  File "D:/lsc/study/python code/test2.py", line 7, in <module>
    b = _B()
NameError: name '_B' is not defined

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值