Skip to main content
 首页 » 编程设计

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

2025年05月04日15Free-Thinker

我是 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()