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
quinta-feira, maio 10, 2007
Assinar:
Postar comentários (Atom)
Um comentário:
Cara, eu faço E. elétrica no cefet, estudo com Flávio. Eu sempre quis fazer E. elétrica, mas, de todas as cadeiras, só estou gostando de calculo e de programação!
ainda estou vendo pascal, mais peguei a apostila de C do curso de E. elétrica da ufcg e estou estudando sozinho =]
Como foi que você transferio de um curso pra outro??
me adiciona no msn, igor-gadelha@bol.com.br =]
Postar um comentário