zoukankan      html  css  js  c++  java
  • Python中类的变量,一个下划线与两个下划线的区别

    形似       功能
    __xx 这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只是解释器把该变量解释成 _类名__xx 。但最好不要这样做,养成良好编程习惯
    _x 这是实例变量,可以访问,但是不要轻易访问。按照约定俗成,当你看到这样的变量时,意思就是,“虽然我可以被访问,但请把我视为私有变量,不要随意访问”。

    代码演示

    class A:
        def __init__(self):
            self._name = 1
            self.__age = 2
    
    
    a = A()
    print(a.__dict__)   # {'_name': 1, '_A__age': 2}
    print(a._name )     # 返回 1。说明一个下划线可以被访问,只是在a.中不会显示。
    print(a.__age)      # 语法报错
    print(a._A__age)    # 返回 2。说明私有变量在外部并不是完全不能被访问

    结合上面代码,问:若使用 a.__gender = "男" 定义一个实例属性,这个实例属性是否私有变量?其他实例对象能否访问?

    使用a.gender定义的实例属性属性不是私有变量,这种方式可以看做是为实例对象a增加了一个__gender属性,这个属性只有实例对象a有,其他实例对象没有,所以其他实例对象也访问不了。

    class A:
        def __init__(self):
            self._name = 1
            self.__age = 2
    
    
    a = A()
    print(a.__dict__)   # {'_name': 1, '_A__age': 2}
    a.__gender = ""
    print(a.__dict__)   # {'_name': 1, '_A__age': 2, '__gender': '男'}
    print(a.__gender)   # 返回“男”
    
    b = A()
    print(b.__dict__)   # {'_name': 1, '_A__age': 2}
    b.__gender      # 语法报错
  • 相关阅读:
    Django——form组件和ModelForm
    CDH hadoop的安装
    Vulnhub-靶机-PRIME: 1
    Vulnhub-靶机-SYMFONOS: 5
    sqlilab-Less-21-30-writeup
    Vulnhub-靶机-SYMFONOS: 4
    Vulnhub-靶机-SYMFONOS: 3
    基础汇总-sqlilab-Less-1-20
    sqlilab-Less-13-19 测试writeup
    sqlilab-Less-9-12 测试writeup
  • 原文地址:https://www.cnblogs.com/testlearn/p/12418427.html
Copyright © 2011-2022 走看看