Есть ли статический блок в классе в Python? - PullRequest
14 голосов
/ 24 октября 2011

Я относительно новичок в питоне Я хотел бы запустить блок кода только один раз для класса. Как статический блок в Java.

например:

class ABC:
    execute this once for a class.

Есть ли в Python такие опции?

В Java мы пишем это так. Это выполняется только один раз для класса во время загрузки класса. Не для каждого объекта создания

public class StaticExample{
    static {
        System.out.println("This is first static block");
    }
}

Спасибо

Ответы [ 2 ]

14 голосов
/ 24 октября 2011

Для этого просто поместите код непосредственно под определение класса (параллельно определениям функций для класса.

Весь код непосредственно в классе выполняется при создании этого типа в пространстве имен класса.Пример:

class Test:
    i = 3
    y = 3 * i
    def testF(self):
        print Test.y

v = Test()
v.testF()
# >> 9

Просто чтобы заполнить последний бит информации для вас: функция вашего метода def s также выполняется (точно так же, как они «выполняются», когда вы определяете функцию в глобальномnamespace), но они не называются. Просто случается так, что выполнение def не имеет явно видимых результатов.

Объектно-ориентированная сущность Python довольно умна, но для ее получения требуется немноготвоя голова вокруг этого! Так держать, это очень забавный язык.

7 голосов
/ 24 октября 2011
>>> class MyClass():
...     print "static block was executed"
... 
static block was executed
>>> obj = MyClass()
>>>

Смотрите здесь для получения дополнительной информации о статических переменных / функциях в Python: Статические переменные класса в Python

...