qq_42456287 2023-03-31 20:49 采纳率: 50%
浏览 18
已结题

python局部import和全局import的疑问

现有两个文件 classA.py 和 classB.py。代码如下

classB

from classA import classA

class classB:
    def changeA(self):
        classA.name="classB"
        print(classA.name)

classA

class classA:
    name = "classA"

def printA():
    print(classA.name)


if __name__ == "__main__":
    printA()
    from classB import classB
    classB().changeA()
    printA()

其中,A类定义了个类变量,所有成员都可以修改该值,但是运行classA.py结果为:

classA
classB
classA

如果在创建一个文件,main.py

main.py

from classB import classB
from classA import *

printA()
classB().changeA()
printA()

运行结果为:

classA
classB
classB

在第一次运行中,类B中的函数并没有成功修改类A的成员,而第二次运行中成功修改了。两次运行的区别就是一个是在函数内部局部import,另一个是在文件头全局import,请问出现这个运行差异的原因是什么?

  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2023-03-31 21:56
    关注

    这么说吧,第一个例子里运行的是main.classA, 而修改的是classA.classA, 所以看起来没有修改成功。第二个例子里,运行的和修改的都是classA.classA,所以显得修改成功了。
    区别在于代码是被import的,还是独立运行的,这也是一般代码为了防止被调用,要加上 if "name" == "main" 的原因。

    本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 专家已采纳回答 4月4日
  • 修改了问题 3月31日
  • 展开全部

悬赏问题

  • ¥15 关于#Mybatis#的问题:怎么办重复数据如下"KSDM":37,"KSMC":"呼吸内科门诊","ksdm":37,"ksmc":"呼吸内科门诊"xml文件填写
  • ¥40 servlet的web程序部署出错
  • ¥50 activiti 新建流程系列问题
  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!