Вопрос

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

Это было полезно?

Решение

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

class Foo:
    bar = 1

print Foo.bar # prints '1'

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

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

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

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

# 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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top