如何定义可以跨类修改和访问的变量

时间:2013-08-02 11:24:11

标签: python

通过添加细节

来修改问题

我在general.py中有一个课程:

class TestProcedure:
    name = "Undefined test procedure"
    description = None
    sequence_count = 0
    .....

保持上面的类为基础,我在各种文件中创建了各种类,例如: 其中一个文件是file1.py

from general import *

class F1(TestProcedure):

    def performTest(self):
        #HERE I WANT TO INCREMENT sequence_count#               

第二个文件是file2.py

from general import *   

class F2(TestProcedure):

    def performTest(self):
        #HERE WHEN I TRY TO ACCESS sequence_count I GET A LAST MODIFIED VALUE#

如上所示,我需要几个这样的类,它们将尝试访问sequence_Count,每当我尝试执行任何文件时,sequence_count都会获得最后修改的值。

如果有任何办法,请告诉我。

3 个答案:

答案 0 :(得分:4)

我不知道您如何更新sequence_count但是如果您要更新原始上的属性而不是实例那么它应该更新反映到所有继承的类。

e.g。

class TestProcedure(object):
    sequence_count = 0

class F1(TestProcedure):
    pass

# These are instances of your class
# We will modify one later to see what happens
class_instance = F1()
un_altered_class_instance = F1()

# This is updating your class
TestProcedure.sequence_count = 20

# This is updating the instance of your class
class_instance.sequence_count = 5

new_class_instance = F1()

print(F1.sequence_count)
# 20
print(class_instance.sequence_count)
# 5
# This outputs 5 as we modified the attribute of the instance
print(un_altered_class_instance.sequence_count)
# 20
# This outputs 20 as we did not modify the attribute of this instance 
print(new_class_instance.sequence_count)
# 20

从上面的示例中可以看出,这将更新原始类以及从中继承的任何内容,包括尚未修改sequence_count属性的实例。如果它们具有,如class_instance中的上文所示,它们将保留其修改后的值。

答案 1 :(得分:0)

看起来你想要一个全局变量(好吧,无论如何都要在模块中)。几乎可以肯定,有一些更好的设计方案可以避免你在这里寻求的耦合,但没有更多细节,全局变量似乎是最简单的答案。

答案 2 :(得分:0)

默认情况下,类定义中定义的所有变量都是静态的。因此,您可以使用TestProcedure.sequence_count代替sequence_count,并且更改将反映在所有文件中。