2010-08-17 4 views
12

Так что я использую статические члены класса, поэтому я могу обмениваться данными между методами класса и статическими методами одного и того же класса (будет только 1 экземпляр класса). Я понимаю это прекрасно, но мне просто интересно, когда статические члены инициализируются? Это на импорт? При первом использовании класса? Потому что я собираюсь называть статические члены этого класса более чем из 1 модуля (поэтому более одного оператора импорта). Будут ли все модули, получающие доступ к статическим методам, использовать одни и те же статические элементы данных? И если мой основной клиент удалит экземпляр моего класса, а затем воссоздает его (не прекращая вообще или повторно импортируя материал), будут ли мои члены данных сохранены?Статические члены python

ответ

13

Они будут инициализированы во время определения класса, которое произойдет во время импорта, если вы импортируете класс как часть модуля. Это при условии, «статический» стиль определения члена класса, как это:

class Foo: 
    bar = 1 

print Foo.bar # prints '1' 

Обратите внимание, что это является членом статический класс, нет необходимости для создания экземпляра класса.

Оператор import будет выполнять содержимое модуля ровно один раз, независимо от того, сколько раз или где он выполняется.

Да, статические члены будут совместно использоваться любым кодом доступа к ним.

Да, статические члены класса будут сохранены, если вы удаляете объект типа которого является то, что класс:

# Create static member 
class Foo: 
    bar = 1 

# Create and destroy object of type Foo 
foo = Foo() 
del foo 

# Check that static members survive 
print Foo.bar # Still prints '1' 
+1

Да, я понимаю, что я не должен создать экземпляр класса. Но экземпляр класса нуждается в доступе к этим членам, а также к другим модулям. Меня беспокоит, что я импортирую этот модуль из нескольких других модулей. Означает ли это, что статические члены сбрасываются для всех модулей? Или каждый модуль, который импортирует его, будет иметь свой собственный набор статических членов? – Falmarri

+0

Ваша правая часть ответила на мой вопрос, спасибо =] – Falmarri