首页 > 编程语言 > 详细

python中变量前面加单下划线和双下划线的区别&python的私有属性

时间:2021-05-17 22:32:00      阅读:33      评论:0      收藏:0      [点我收藏+]

python中变量前面加单下划线和双下划线的区别&python的私有属性

一、在py文件中

变量名字前面加单下划线和双下划线都是对变量的保护,一种约定,用来指定变量私有。

程序员用来指定私有变量的一种方式.不能用from module 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里面没有真正意义上的私有变量

python中变量前面加单下划线和双下划线的区别&python的私有属性

原文:https://www.cnblogs.com/hls-code/p/14777980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!