导入类变量蟒蛇

问题描述:

我有两个Python类,一个使用了其他的变量导入类变量蟒蛇

A类:

class A(object): 

    variable = None 

    @classmethod 
    def init_variable(cls): 
     cls.variable = something 

B类:

variable = __import__('module').A.variable 

class B(object): 

    @staticmethod 
    def method(): 
     return variable 

我尽可能简化我的问题,因为可能。所以我的问题是,为什么我仍然有B.method()返回NoneType即使我使用init_variable

+0

这是两个不同的变量。您可能想了解[Python变量如何工作](https://nedbatchelder.com/text/names.html)。 – user2357112

+0

我认为当你像这样导入模块'A'时,你创建了该模块的一个新实例,而不是导入已经存在的模块。另外,你什么时候更新'A.variable'? – Peter

+1

@彼得,这是我怀疑。实际上,我正在制作一个包,并且'A.variable'需要用户输入,因此我希望'B'类在更新时使用这个变量。 –

something更新A.variable类变量,我改变了你的代码位,所以它会实际上做你想要什么:

your_package/klass_A的.py

class A(object): 
    variable = None 

    @classmethod 
    def init_variable(cls, something): 
     cls.variable = something 

your_package/klass_B.py

from your_package.klass_A import A 

class B(object): 
    @staticmethod 
    def method(): 
     return A.variable 

现在,您实际上可以更新A.variable并使用B中的更新变量。例如这样的:

print B.method() 
A.init_variable('123') 
print B.method() 

回报:

None 
123 
+0

谢谢我认为这会起作用,因为你导入了整个类,所以我们不能只使用类变量,因为它会导入一个“副本”,并且在类中更改时不会跟踪它。 –

+0

我用概念证明更新了帖子。它实际上按照你的意图工作:-) – Peter

+0

如果你认为这个答案是正确的,你会介意接受它吗? :-) – Peter