实例中的静态变量范围?

时间:2019-12-24 10:02:33

标签: python python-3.x

我对下面的Python静态变量片段感到困惑。当我执行时,我将访问实例变量。但是如果我注释掉第3行,那么将访问static变量。我想知道为什么实例方法的行为如此。

class Test:
     static_variable = "this is static variable"

     def __init__(self):
            self.static_variable= "this is some instance variable" # 3

     def some_method(self):
             print(self.static_variable)

t = Test()
t.some_method()

3 个答案:

答案 0 :(得分:2)

您正在使用list-style,它是实例本身,查找将在实例的范围内进行,并回退到类的范围。

在您的情况下,如果您要在none中分配变量,则将首先解析该变量,否则将首先解析class属性。

答案 1 :(得分:0)

您可以使用selfTest

访问类属性
print(self.static_variable)
print(Test.static_variable)

但是,如果您覆盖self.static_variable,那么上面的2个调用将不会返回相同的值,并且此值

class Test:
    static_variable = "this is static variable"

    def __init__(self):
        self.static_variable = "this is some instance variable"  # 3

    def some_method(self):
        print(self.static_variable)
        print(Test.static_variable)
# will give this
this is some instance variable
this is static variable

类属性static_variable首先只是类属性,然后作为类属性和实例属性存在

答案 2 :(得分:0)

在python中,当在类级别定义的静态变量成为类的属性时,一切都是对象。 当创建一个类的实例时,我们在实例级别定义了与属性相同的名称,那么我们确实会覆盖在类级别定义的属性。理想情况下,静态变量应该与strcmp()一起使用。 试试这个:

RowHeights