python possui variáveis estáticas?

1,307 views
Skip to first unread message

Fábio Barrionuevo

unread,
Apr 10, 2012, 8:31:49 AM4/10/12
to python...@googlegroups.com
Ola a todos.

Python possui variáveis estáticas?

No java tenho a seguinte declaração:

public class JavaClass {
    static Integer variavelEstatica;
    Integer variavelComum;
}


onde "variavelEstatica" seria unica e global para qualquer Instancia da classe JavaClass.

então caso eu modificasse o valor de "variavelEstatica", esta seria alterada em todas as instancias de JavaClass.

Como posso chegar ao mesmo comportamento em uma classe python?
Ha uma forma melhor ou mais "pythonica" de chegar a um comportamento similar?

Obrigado a todos.

--
Fábio C. Barrionuevo da Luz
Acadêmico de Sistemas de Informação na Faculdade Católica do Tocantins - FACTO
Palmas - Tocantins - Brasil - América do Sul

Alysson Bruno

unread,
Apr 10, 2012, 8:42:02 AM4/10/12
to python...@googlegroups.com
Arquivo de configuração?

paz e amor (love and peace),

Alysson Bruno
Palmas(TO)
Brasil

http://abruno.com


Leia Heo Sargila. Uma história fantástica. Num mundo chamado de Aravel, os humanos, saveales, vivem algumas aventuras, conheça a história de como tudo foi criado, na versão ouvida pelo Imperador Sädir (Conto a história da criação), leia sobre o bravo Ivan que enfrentou uma besta que devorava crianças (A lenda do Dragão), conheça a bela Zayra e sua vida (Guerra em Radest) e finalmente veja como uma guerra praticamente extinguiu os savelas (Romance Proibido), tudo isso disponível de graça aqui: http://goo.gl/AXv1g





2012/4/10 Fábio Barrionuevo <bna...@gmail.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

Message has been deleted

Ivanelson Nunes

unread,
Apr 10, 2012, 9:01:01 AM4/10/12
to python...@googlegroups.com
Seria algo como uma variável de classe, e referenciar pelo nome da Classe ao invés de self, tipo:

Dirley

unread,
Apr 10, 2012, 9:01:20 AM4/10/12
to python...@googlegroups.com
Fábio,

Basta você declarar a variável no escopo da classe. Assim:

class A(object):
    valor = 0

aa = A()
ab = A()

assert aa.valor is ab.valor

Vale observar, porém, que isso não é a mesma coisa que variáveis estáticas do Java. O que acontece aí é que, em Python, quando você acessa um atributo de um objeto (instância de uma classe), o Python procura primeiro por aquele atributo na instância e depois, caso não encontre, procura pelo atributo na classe do objeto. Como as instâncias da classe 'A' não possuem um atributo 'valor', o atributo da classe é utilizado. Portanto, você poderia fazer:

aa.valor = 'outracoisa'

assert aa.valor is not ab.valor

- D


Em 10 de abril de 2012 09:31, Fábio Barrionuevo <bna...@gmail.com> escreveu:

Adam Victor Nazareth Brandizzi

unread,
Apr 10, 2012, 9:02:57 AM4/10/12
to python...@googlegroups.com
On Tue, Apr 10, 2012 at 9:31 AM, Fábio Barrionuevo <bna...@gmail.com> wrote:
> Ola a todos.
>
> Python possui variáveis estáticas?
>
> No java tenho a seguinte declaração:
>
> public class JavaClass {
>     static Integer variavelEstatica;
>     Integer variavelComum;
> }
>
>
> onde "variavelEstatica" seria unica e global para qualquer Instancia da
> classe JavaClass.
>
> então caso eu modificasse o valor de "variavelEstatica", esta seria alterada
> em todas as instancias de JavaClass.
>
> Como posso chegar ao mesmo comportamento em uma classe python?
> Ha uma forma melhor ou mais "pythonica" de chegar a um comportamento
> similar?
>
> Obrigado a todos.

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/

Christian S. Perone

unread,
Apr 10, 2012, 9:04:16 AM4/10/12
to python...@googlegroups.com
Primeiro resultado do Google:

http://stackoverflow.com/questions/68645/static-class-variables-in-python


--
------------------------------------
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



--
"Forgive, O Lord, my little jokes on Thee, and I'll forgive Thy great big joke on me."
http://pyevolve.sourceforge.net/wordpress/

Fábio Barrionuevo

unread,
Apr 10, 2012, 5:08:09 PM4/10/12
to python...@googlegroups.com
Muito obrigado a todos pela explicação.
Reply all
Reply to author
Forward
0 new messages