2009-08-17 7 views
0

Я пишу игру на Python с мультимедийной библиотекой Pygame2, но я больше привык к разработке игр с ActionScript 3. В AS3 я не думаю, что было возможно сохранить объект в статической переменной, потому что статические переменные были инициализированы до того, как объекты могут быть созданы.Можно ли хранить объекты в классах класса Python?

Однако в Python я не уверен, что это верно. Можно ли сохранить экземпляр объекта в переменной класса Python? Когда он будет создан? Будет ли создаваться экземпляр для каждого класса или экземпляра?

class Test: 
    counter = Counter() # A class variable counts its instantiations 
    def __init__(self): 
     counter.count() # A method that prints the number of instances of Counter 

test1 = Test() # Prints 1 
test2 = Test() # Prints 1? 2? 
+0

Вы уверены, что вы имеете в виду статические? Вы можете задать статический переменные, как и любая другая переменная в ActionScript 3. Или, может быть, статичность означает что-то еще i Python (по сравнению с ActionScript 3)? –

+0

Хм ... возможно, я думал о константах. Статические переменные или константы были установлены во время компиляции, прежде чем какие-либо объекты могут быть созданы. –

ответ

2

Да.
Как и в случае с большинством python, попробуйте его и посмотрите.

Он будет создан при создании тестового объекта. т.е. ваше назначение test1
Объект счетчика создается в классе

Выполните следующие действия, чтобы увидеть (для доступа к переменной класса вам нужно самости

class Counter: 
    def __init__(self): 
    self.c = 0 

    def count(self): 
    self.c += 1 
    print 'in count() value is ' , self.c 
    return self.c 

class Test: 
    counter = Counter() # A class variable counts its instantiations 
    print 'in class Test' 
    def __init__(self): 
    print 'in Testinit' 
    self.counter.count() # A method that prints the number of instances of Counter 

test1 = Test() # Prints 1 
test2 = Test() 
3

Вы можете сделать это:

class Test: 
    counter = 0 
    def __init__(self): 
    Test.counter += 1 
    print Test.counter 

И это работает, как ожидалось.