Статические члены класса Python - PullRequest
12 голосов
/ 17 августа 2010

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

1 Ответ

14 голосов
/ 17 августа 2010

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

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...