python中的下划线
_XXX 不能用from module import * 导入
__XXX 类中的私有变量名,只有本类能访问,子类也不能访问。
XXX 系统定义的名字,用来区别其他用户自定义的命名 Class1.doc # 类型帮助信息 'Class1 Doc.'
class 里单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻
class Person(object):
def __init__(self,name,age):
self.name = name
self._age = age
def play(self):
print(self.name,self._age)
- Class1.name # 类型名称 'Class1'
- Class1.module # 类型所在模块 'main'
- Class1.bases # 类型所继承的基类 (<type 'object'>,)
- Class1.dict # 类型字典,存储所有类型成员信息。 <dictproxy object at 0x00D3AD70>
- Class1().class # 类型 <class 'main.Class1'>
- Class1().module # 实例类型所在模块 'main'
- Class1().dict # 对象字典,存储所有实例成员信息。 {'i': 1234}
- “单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入
def main():
p = Person('王大锤',12)
p.play()
"""
'单下划线'的保护变量
大多数Python程序员会遵循一种命名惯例就是让属性名以单下划线开头来表示属性是受保护的,
本类之外的代码在访问这样的属性时应该要保持慎重。
这种做法并不是语法上的规则,单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻
"""
print(p._age)
if __name__ == '__main__':
main()
“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。通过对象名._类名__xxx这样的方式可以访问.
class Person(object):
def __init__(self,name,age):
self.name = name
self.__age = age
def play(self):
print(self.name,self.__age)
def main():
p = Person('王大锤',12)
p.play()
# ‘双下划綫’的私有变量,只能通过 对象名._类名__XXX才能访问,只有类自己能访问
print(p._Person__age)
if __name__ == '__main__':
main()