quinta-feira, maio 10, 2007

Atributos de classe

Os atributos de classe em Python, são equivalentes às variáveis 'static' de Java. Eles podem ser acessados sem precisar criar uma instância dessa classe, e ficam definidas em todo seu escopo.
Diferente dos atributos de dados, que são as variáveis de instância, e são definidas dentro do método __init__(precedidos por 'self'), os atributos de classe são definidos fora de qualquer método, somente dentro do corpo da classe.

Aqui é um exemplo simples de uma classe com somente um atributo de classe:

>>> class Idade:
... i = 18
...
>>> Idade.i
18

o valor de 'i' pode ser acessada sem precisar criar uma instância da classe Idade. Porém, caso um objeto seja criado, ele também vai poder acessar essa variável:

>>> eu = Idade()
>>> eu.i
18

Assim como 'self' é uma referência a instância atual, também existe uma referência a classe. É um atributo embutido em toda classe: __class__
Vamos usá-lo:

>>> class Idade:
... i = 18
... def __init__(self):
... self.__class__.i += 1
...
>>> Idade.i
18
>>> eu = Idade()
>>> eu.i
19
>>> Idade.i
19

Quando eu acessei Idade.i pela primeira vez, como a classe Idade não havia sido instânciada, o método __init__ não foi chamado. Então o valor de retorno foi 18, o nosso atributo de classe definido acima.
No momento que eu criei o objeto 'eu', o método __init__ foi chamado, e o valor de 'i' foi incrementado, mas perceba o uso de __class__, fazendo referência a classe, assim como 'self' fazendo referência a instância recém criada, no caso, 'eu'. Ou seja, o valor de 'i', apesar de ser incrementado dentro de um método, continua sendo um atributo de classe, e é normalmente acessado por qualquer objeto.

Para quem ainda não se sente muito a vontade com Orientação a Objetos, tem um post anterior que da essa introdução.
No site da nossa comunidade, pythonbrasil.com.br, também tem um boa documentação:
- Introdução OOP
- Módulo B: Python Orientado a Objetos
dentre outros

Assim como no site oficial do Python, python.org:
- Classes (do python tutorial)

Fonte: livro Megulhando no Python

segunda-feira, maio 07, 2007

Nova condicional no Python 2.5

Recentemente instalei o Ubuntu 7.04(Feisty Fawn). Estava usando o 6.10, mas não consegui configurar minha placa Wireless, até desktop 3D tava rodando, com Beryl, mas internet sem fio...nada! Como mesmo no live CD do Feisty Fawn as redes Wireless já apareciam, imediatamente instalei(claro que o problema foi minha "enoorme" habilidade com Linux.. :P). Aliás, tenho um novo problema, agora é com o som(o que está me irritando profundamente), minha placa de som não da sinal de vida! Por favor os gurus em Linux...ajudem!

Mas tive uma boa notícia quando digitei "Python" no terminal: Python 2.5.1c1
Estava adiando minha atualização por mera preguiça.

Uma mudança simples que eu achei bem interessante foi uma nova estrutura para o if:

>>> nome = 'igor'
>>> if nome: print 'tenho nome'
... else: print 'nao tenho nome'
...
tenho nome

Assim é o normal...mas agora pode ser feito assim:

>>> nome = 'igor'
>>> print 'tenho nome' if nome else 'nao tenho nome'
tenho nome

>>> nome = ''
>>> print 'tenho nome' if nome else 'nao tenho nome'
nao tenho nome

Como sempre, as coisas em Python bem mais simples.
Foram adicionadas mais coisas...claro. Essa é só o primeiro link! :)

Veja mais: http://docs.python.org/whatsnew/whatsnew25.html