gpt4 book ai didi

python - 基类变量不存储派生类设置的值

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:32 24 4
gpt4 key购买 nike

我是 python 新手。基类/python文件(Base.py).

SESSION_ID = ""

def m1():
print "SESSION_ID in base: ",SESSION_ID

派生类(Derived.py)

from Base import *

class Derived():
def m2(self):
global SESSION_ID
SESSION_ID = 10
print "SESSION_ID in derived: ", SESSION_ID

def main():
c2 = Derived()
c2.m2()
m1()


if __name__ == "__main__":
main()

当我执行下面的 Derived.py 文件时,输出是:

SESSION_ID in derived:  10
SESSION_ID in base:

我希望在 m2() 中设置的值反射(reflect)在 m1() 中。所以预期的输出是:

SESSION_ID in derived:  10
SESSION_ID in base: 10

你能帮忙吗?

最佳答案

模块中的全局变量仅仅是一个属性(即一个成员该模块的实体)。

因此,当您使用 import * 时,会创建新的本地模块全局 SESSION_ID,因此基础中的 SESSION_ID 不受您所做更改的影响在派生中。

基本上,修改base.SESSION_ID不需要使用Derived.py中的global语句,调整import 就够了,看下面的代码:

from settings import base


class Derived():
def m2(self):
base.SESSION_ID = 10
print "SESSION_ID in derived: ", base.SESSION_ID

def main():
c2 = Derived()
c2.m2()
base.m1()


if __name__ == "__main__":
main()

关于python - 基类变量不存储派生类设置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com