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()  # 不报错
原文地址:https://www.cnblogs.com/xiaochongc/p/15527676.html