2013-08-02 2 views
2

Modifyin Вопрос путем добавления деталей

У меня есть один класс в 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 получает последнее измененное значение.

Если есть какой-либо способ сделать то же самое, то, пожалуйста, дайте мне знать.

ответ

0

Похоже, вы хотите глобальную переменную (ну, в любом случае, внутри модуля). Почти наверняка есть несколько лучших альтернатив дизайна, которые позволяют избежать связи, которую вы ищете здесь, но без каких-либо подробностей глобальная переменная кажется самым простым ответом.

4

Я не знаю, как вы обновляете sequence_count, но если вы должны были обновить атрибут исходного класса и не экземпляра то оно должно быть отражено во всех унаследованных классов.

например.

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, они будут сохранять свое измененное значение.

0

Все переменные, определяемые внутри определения класса, по умолчанию статичны. И поэтому вы можете использовать TestProcedure.sequence_count вместо sequence_count везде, и изменения будут отражены во всех файлах.

Смежные вопросы