1、私有化:
- xx:共有变量
- _x:单前置下划线,私有化属性或方法,
from somemodule import *
禁止导入,类对象和子类可以访问 - __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到
- __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__,__不要自己发明这样的名字
- xx_:单后置下划线,用于避免与Python关键字的冲突
通过name mangling(名字重整(目的是以防止子类意外重写基类的方法或属性)如:_Class__object)机制就可以访问private了
2、import导入模块
(1)import搜索路径
路径搜索
- 从上面列出的目录一次查找要导入的模块文件
- ‘’表示当前路径
- 列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序
程序执行时添加新的模块路径
(2)重新导入模块
模块被导入后,import module
不能重新导入模块,重新导入需要用reload
(3)多模块开发的注意点
①实例:
这里我们使用4个.py
文件来说明这个问题。
1、common.py
RECV_DATA_LIST = list() # 用来存储数据
HANDLE_FLAG = False # 用来标记是否完成
2、handle_msg.py
from common import RECV_DATA_LIST
import common
def handle_data():
"""模拟处理recv_msg模块接受的数据"""
print("----handle_data----")
for i in RECV_DATA_LIST:
print(i)
# 既然处理完成了,那么将变量HANDLE_FLAG设置为True,意味着处理完成
common.HANDLE_FLAG = True
def test_handle_data():
"""测试处理是否完成,变量是否设置为True"""
print("---->test_handle_data")
if common.HANDLE_FLAG:
print("====已经处理完成====")
else:
print("====未处理完成====")
3、recv_msg.py
from common import RECV_DATA_LIST
import common
def recv_msg():
"""模拟接收到的数据,然后添加到common的列表中"""
print("---->recv msg")
for i in range(5):
RECV_DATA_LIST.append(</