zoukankan      html  css  js  c++  java
  • python 以下划线开头的变量和函数

    变量名的分类:

    以数字字母开头:正常的公有变量,如:a=1, def a()

    以单下划线开头:半私有,如:_b = 2, def _bb()

    以双下划线开头:私有,如:__c = 3, def __cc()

    以双下划线开头双下划线结尾:内置属性名或魔法方法名(系统定义的名字),如:__name__, __dir__

    公有

    任何人都可以使用

    半私有

    1. 类外

    类外的半私有对象、私有对象,功能一致,均是在本模块中可以正常使用,但是不能被直接导入并调用

    如果一定要在模块外使用,那么需要导入本模块,然后使用(模块名.变量名)进行调用

    2. 类中

    类中的半私有对象,仅仅是概念上的私有,默认不要在类外进行调用

    实际在类外,均可以使用(实例名.变量名/类名.变量名)进行调用

    私有

    1. 类外

    同半私有一样

    2. 类中

    类中的私有对象,在类外均不能直接调用,可以理解为真私有

    但是python没有完全私有的对象,此种对象可以通过矫直在类外进行调用的(在私有属性名、私有方法名前添加(_类名))

    魔法方法

    这是python自己实现的属性和方法,一般不允许以这种方式自定义属性或方法

    半私有举例:

    在d2.py中调用d1.py中的半私有函数 

    d1.py

    def _init():
        global _global_dict
        _global_dict = {}
    
    
    def set_value(key, value):
        _global_dict[key] = value
    
    def get_value(key):
        return _global_dict[key]

    d2.py

    import d1  # 导入d1模块
    
    d1._init()  # 使用模块名.函数名进行调用
    
    
    d1.set_value('name1', 'zhangsan')
    print(d1.get_value('name1'))

    另,

    d2.py(以下会报错)

    from d1 import *
    
    _init()  # 会提示错误:Unresolved reference '_init'

    d2.py(以下不报错,这是为啥子呢?)

    from d1 import _init
    
    _init()  # 不报错
  • 相关阅读:
    【题解】魔术棋子
    NHOI2019小结
    【题解】滑雪
    【题解】最大平台
    【题解】洪水
    【题解】N皇后问题
    【题解】四色定理
    使用Docker快速搭建Jenkins
    使用Docker快速搭建Gitlab
    测试用Docker Swarm环境搭建
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/15527676.html
Copyright © 2011-2022 走看看