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