--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
class A(object):valor = 0aa = A()ab = A()assert aa.valor is ab.valor
aa.valor = 'outracoisa'assert aa.valor is not ab.valor
Se você atribuir um valor dentro da declaração da classe, criará algo
bem semelhante à variável estática:
>>> class A(object):
... static_field = "static"
...
>>> a = A()
>>> a.static_field
'static'
>>> b = A()
>>> b.static_field
'static'
>>> A.static_field = "another text"
>>> a.static_field
'another text'
>>> b.static_field
'another text'
Isso não precisa sequer ser feito dentro da declaração: você pode
adicionar atributos à classe a qualquer momento:
>>> a.another_static_field
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'A' object has no attribute 'another_static_field'
>>> A.another_static_field = "another"
>>> a.another_static_field
Note que você NÃO pode atribuir valor ao campo estático através da
instância. Nesse caso, você criaria um atributo na instância com o
mesmo nome do atributo da classe:
>>> a = A()
>>> a.static_field
'static'
>>> a.static_field = "non static"
>>> a.static_field
'non static'
>>> # Agora, outra instância continua pegando valor estático
>>> b = A()
>>> b.static_field
'static'
...
Agora, isso é pythônico. Dificilmente, eu diria. Preferível seria
criar, no módulo em que a classe é declarada, uma variável. Suponha,
por exemplo, que tenho ese modulo.
$ cat my_module.py
pseudostatic_field = "It is like a static field, but is not inside a class"
class MyClass(object):
def wat(self):
print pseudostatic_field
Agora, eu poderia trabalhar com ele assim:
>>> import my_module
>>> a = my_module.MyClass()
>>> a.wat()
It is like a static field, but is not inside a class
Se eu precisar alterar o valor da variável (que seria equivalente ao
campo estático), basta fazer assim:
>>> my_module.pseudostatic_field = "And now?"
>>> a.wat()
And now?
Agora, por que isto é preferível a colocar dentro da classe? Bem, se
eu colocasse a variável dentro da classe, teria de digitar assim:
>>> my_module.MyClass.pseudostatic_field = "And now?"
Oras, para quer digitar mais se posso digitar menos :)
Esse e muitos outros temas são explorados nesse clássico do mundo
Python: http://www.python.org.br/wiki/PythonNaoEJava
--
Adam Victor Nazareth Brandizzi
http://brandizzi.googlepages.com/
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com