python-模块的嵌套调用-随堂草稿件

模块嵌套调用的坑,经验

在这里插入图片描述

从b.py启动
b.py中导入了green目录下的g模块
测试时运行正常
在这里插入图片描述

测试b模块运行正常后
我们可以就以为b模块开发好了(导模块方面)
开心地去开发别的模块了

结果
r.py要导入b模块
在这里插入图片描述

r.py代码
在这里插入图片描述

b.py的代码
在这里插入图片描述

g.py的代码
在这里插入图片描述

从r模块启动后,发现报错

在这里插入图片描述

r文件导入模块,会优先从r所在的工作目录来找
如果找不到,就去解释器所在目录的lib的目录中去找

在这里插入图片描述

关注报错的原因

在这里插入图片描述

模块导入的原理
1,main.py是启动文件
如果他要导入模块
优先从main.py所在的目录开始找
比如
在这里插入图片描述
2,如果要导的内容,在工作目录中没有
那么会从python解释器所在工作目录的lib目录下找
简单的说,如果在main.py没有找到要的模块
就会去一个特别的地方去找
理解这一点就好

3,如果我导入的模块中,又导入了别的模块。
那么寻找的起点,以启动文件所在目录为启动。
简单来说
如果要从r模块中导入b模块
那么r的写法,应该从untitle8这里开始找
理解为主

总结一下
一旦程序启动
所以有模块导入都要以启动文件为参照

如果我希望破掉这个规则
不是以启动文件为起点来调的话
还有一个办法,就是
把我们的启动路径添加到环境变量

例子

在这里插入图片描述
main.py导入了b模块
b模块导入g模块
g模块中有G变蛳
如果我要在main.py中获得G变量的数据
按照图示的方式来获取

被导入的模块我们要把它理解为一个对象
可以把它当作一个模块对象

环境变量

python中的sys模块中有一个path

sys.path
可以得到环境变量的数据,结果是一个列表

环境变量是提供给计算机一个查找路径

模块导入演练

代码

import filehandle
#
# 模块导入后
# 使用办法
# 1,使用模块的变量
# 模块名.变量名
#
# 2,如果要用模块中的方法
# 模块名.方法名()

res = filehandle.model_name
print(res)

filehandle.get_time()

反射的复习

class Dog:
    def __init__(self, name):
        self.name = name


xtq = Dog("笑天狗")

# 获取狗的名字
# 对象.属性
n = xtq.name
print(n)

# 通过反射的方式来拿
# 反射的应用场景是,我有一个字符串,我想利用字符串来取值
a = "name"
# xtq.a  ----> xtq.name
# getattr(obj对象,str属性名)    ---- 》 对象.属性
n2 = getattr(xtq,a)
# 相当于第十八行相当于第二十行
# n2 = getattr(xtq,"name")
# 第二十行,效果相当于第22行。
# n2 = xtq.name
print(n2)

小结
获取对象 t 的属性 name 的值两种方式

方式一
对象.属性
t.name

方式二
getattr(对象, 属性字符串)
getattr(t,"name")

反射的新功能解锁

可以使用反射来拿模块中的标识符

反射获取变量

在这里插入图片描述

在这里插入图片描述

反射执行模块中的方法

import filehandle

# f = filehandle.get_time
# f()

f2 = getattr(filehandle, "get_time")
f2()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值