一、在py文件中
变量名字前面加单下划线和双下划线都是对变量的保护,一种约定,用来指定变量私有。程序员用来指定私有变量的一种方式.不能用from module import * 导入,其他方面和公有一样访问;可以使用import方式导入。在py文件内可以正常使用。
num = 1
_num = 10
__num = 100
if __name__ == '__main__':
print(num)
print(_num)
print(__num)
# 结果:
1
10
100
二、在类里面:
1、单下划线开头的变量
变量前的单下划线表示表面上私有
但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
class Dog(object):
_colour = '黑色'
age = 2
dog = Dog()
print(dog._colour) # 对象点属性的时候虽然不会自动提示,但是你硬写上去也能打印出来
# 结果
黑色
2、双下划线开头的变量
双下划线开头的变量是类里面的私有变量,只能在类的内部访问,在外部是不允许访问的和修改的
class Dog(object):
_colour = '黑色'
__age = 2
dog = Dog()
print(dog.__age)
# 结果报错
AttributeError: 'Dog' object has no attribute '__age'
但是可以使用方法去间接的获取和修改
class Dog(object):
_colour = '黑色'
__age = 2
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
dog = Dog()
print(dog.get_age())
dog.set_age(6)
print(dog.get_age())
# 结果
2
6
其实不用间接获取也能获取到,python只是把私有变量的名字给修改了
class Dog(object):
_colour = '黑色'
__age = 2
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
dog = Dog()
print(dog._Dog__age) # 使用 _类名 + 变量名 当作属性去访问依然能访问到
# 结果
2
所以,python里面没有真正意义上的私有变量
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)