我对下面的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()
答案 0 :(得分:2)
您正在使用list-style
,它是实例本身,查找将在实例的范围内进行,并回退到类的范围。
在您的情况下,如果您要在none
中分配变量,则将首先解析该变量,否则将首先解析class属性。
答案 1 :(得分:0)
您可以使用self
或Test
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