Skip to content

Commit d96b36b

Browse files
committed
Atualizando o post Introdução a Classes e Métodos
1 parent 38d8c2c commit d96b36b

File tree

1 file changed

+71
-10
lines changed

1 file changed

+71
-10
lines changed

content/introducao-classes-metodos-python-basico.rst

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ Introdução a Classes e Métodos em Python (básico)
1010
:github: rg3915
1111
:summary: Abordaremos aqui o básico sobre o uso de classes e métodos e a manipulação de dados em Python.
1212

13-
Eu não sou a melhor pessoa do mundo para explicar este assunto, mas eu escrevi este post para introduzir um tópico sobre *manipulação de banco de dados em SQLite3 com Python*, porém mais informações sobre classes e métodos podem ser encontradas nos links abaixo. Veja os exemplos em `https://github.com/rg3915/pythonDesktopApp <https://github.com/rg3915/pythonDesktopApp/tree/master/pythonBasico>`_.
13+
Eu não sou a melhor pessoa do mundo para explicar este assunto, mas vou tentar fazer uma breve introdução a classes e métodos em Python.
14+
15+
Mais informações sobre classes e métodos podem ser encontradas nos links abaixo. Veja os exemplos em `https://github.com/rg3915/python-classes-metodos <https://github.com/rg3915/python-classes-metodos/tree/master/pythonBasico>`_.
16+
17+
> Este artigo foi atualizado em 23 de Maio de 2018.
1418

1519
PS: *Considere a sintaxe para Python 3*.
1620

17-
Segundo a documentação do `Python <https://docs.python.org/2/tutorial/classes.html#class-objects>`_ e o video `Python para Zumbis <https://www.youtube.com/watch?v=Zr_FiKbgRbU>`_, uma **classe** associa dados (**atributos**) e operações (**métodos**) numa só estrutura. Um **objeto** é uma variável cujo tipo é uma classe, ou seja, um **objeto é uma instância** de uma classe.
21+
Segundo a documentação do `Python <https://docs.python.org/3/tutorial/classes.html#class-objects>`_ e o video `Python para Zumbis <https://www.youtube.com/watch?v=Zr_FiKbgRbU>`_, uma **classe** associa dados (**atributos**) e operações (**métodos**) numa só estrutura. Um **objeto é uma instância** de uma classe. Ou seja, uma representação da classe. Por exemplo, Regis é uma instância de uma classe chamada Pessoa, mas a Pessoa é a classe que o representa de uma forma genérica.
1822

1923
Na sua sintaxe mais elementar definimos uma classe conforme abaixo:
2024

@@ -43,10 +47,9 @@ Juntando os dois temos:
4347
.. code-block:: python
4448
4549
class NomeDaClasse(object):
46-
atributo1 = None
4750
4851
def metodo(self, args):
49-
pass
52+
pass
5053
5154
5255
@@ -62,17 +65,15 @@ Um exemplo de uma função vazia feita em linguagem C e a mesma função vazia f
6265
.. code-block:: C
6366
6467
void metodo(int num){
65-
68+
6669
}
6770
6871
.. code-block:: python
6972
7073
def metodo(num):
7174
pass
7275
73-
Voltando a explicação sobre a classe: O ``atributo1`` é um atributo com valor inicial ``None`` (nada). Poderia ser ``atributo1 = 0``, por exemplo.
74-
75-
Importante: Note que para nome de **classes** usamos *PalavrasComeçandoPorMaiúscula* (isso tambem é conhecido como "CamelCase") e para nome de **métodos (funções)** usamos *minúsculas_separadas_por_underscore*. Esta é uma convenção adotada pelos *Pythonistas* segundo o `Guia de Estilo <http://www.python.org.br/wiki/GuiaDeEstilo>`_ **PEP 8** - `Style Guide for Python Code <http://legacy.python.org/dev/peps/pep-0008/>`_ escrito por `Guido Van Rossum <http://www.python.org.br/wiki/GuidoVanRossum>`_.
76+
Importante: Note que para nome de **classes** usamos *PalavrasComeçandoPorMaiúscula* (isso tambem é conhecido como "`CapitalizeWords <http://pep8.org/#descriptive-naming-styles>`_") e para nome de **métodos (funções)** usamos *minúsculas_separadas_por_underscore*. Esta é uma convenção adotada pelos *Pythonistas* segundo o `Guia de Estilo <http://www.python.org.br/wiki/GuiaDeEstilo>`_ **PEP 8** - `Style Guide for Python Code <http://legacy.python.org/dev/peps/pep-0008/>`_ escrito por `Guido Van Rossum <http://www.python.org.br/wiki/GuidoVanRossum>`_.
7677

7778
Exemplo 1 - Calculadora simples
7879
-------------------------------
@@ -187,16 +188,21 @@ Usando o **terminal no modo interativo** façamos:
187188
>>> from calculadora2 import Calculadora
188189
>>> c = Calculadora()
189190
>>> print('Soma:', c.soma(2,3))
191+
Soma: 5
190192
>>> print('Subtração:', c.subtrai(2,10))
193+
Subtração: -8
191194
>>> print('Multiplicação:', c.multiplica(3,3))
195+
Multiplicação: 9
192196
>>> print('Divisão:', c.divide(128,2))
197+
Divisão: 64.0
198+
>>>
193199
194200
A vantagem de colocar os parâmetros em cada método, é que podemos calcular qualquer valor sem ter que instanciar uma nova classe para cada valor diferente.
195201

196202
Exemplo 3 - Classe Pedido
197203
-------------------------
198204

199-
Agora veremos um exemplo que mais se aproxima do que iremos fazer em banco de dados, mas aqui iremos apenas instanciar os objetos e armazená-los em memória numa lista.
205+
Agora veremos um outro exemplo, mas aqui iremos apenas instanciar os objetos e armazená-los em memória numa lista.
200206

201207
Veremos o código na íntegra e depois os comentários.
202208

@@ -246,6 +252,9 @@ Podemos rodar o Python no modo `modo interativo <https://docs.python.org/3/tutor
246252
>>> u2 = User('Fabio',20)
247253
>>> u2.save()
248254
>>> print(User.all())
255+
[<User: 1 - Regis - 35>
256+
, <User: 2 - Fabio - 20>
257+
]
249258
250259
Agora os comentários:
251260

@@ -342,11 +351,63 @@ Note que nesse ``print`` a lista está vazia.
342351
343352
Após chamar o ``save`` para as duas instâncias elas são guardadas e o método ``User.all()`` retorna essa lista.
344353

354+
Exemplo 4 - Televisão
355+
---------------------
356+
357+
Escrevi mais um exemplo para fixar melhor o entendimento: `tv.py <https://github.com/rg3915/python-classes-metodos/blob/master/pythonBasico/tv/tv.py>`_.
358+
359+
.. code-block:: python
360+
361+
class Televisao():
362+
363+
def __init__(self):
364+
self.ligada = False
365+
self.canal = 2
366+
367+
def muda_canal_para_baixo(self):
368+
self.canal -= 1
369+
370+
def muda_canal_para_cima(self):
371+
self.canal += 1
372+
373+
if __name__ == '__main__':
374+
tv = Televisao()
375+
print('Canal inicial:', tv.canal)
376+
print('Ligada:', tv.ligada)
377+
378+
tv.ligada = True
379+
tv.canal = 5
380+
381+
print('Ligada:', tv.ligada)
382+
print('Canal inicial:', tv.canal)
383+
tv.muda_canal_para_cima()
384+
print('Canal +', tv.canal)
385+
tv.muda_canal_para_cima()
386+
print('Canal +', tv.canal)
387+
tv.muda_canal_para_baixo()
388+
print('Canal -', tv.canal)
389+
390+
Este programa está muito bem explicado no video `Python para Zumbis <https://www.youtube.com/watch?v=Zr_FiKbgRbU>`_.
391+
392+
A seguir o resultado do programa:
393+
394+
.. code-block:: python
395+
396+
$ python tv.py
397+
('Canal inicial:', 2)
398+
('Ligada:', False)
399+
('Ligada:', True)
400+
('Canal inicial:', 5)
401+
('Canal +', 6)
402+
('Canal +', 7)
403+
('Canal -', 6)
404+
405+
345406
Agradeço a colaboração de `Fabio Cerqueira <https://gist.github.com/fabiocerqueira/1b05352a26892dea6813>`_.
346407

347408
Veja os exemplos em `https://github.com/rg3915/pythonDesktopApp <https://github.com/rg3915/pythonDesktopApp/tree/master/pythonBasico>`_.
348409

349-
Mais informações em
410+
Mais informações em
350411

351412
`Classes Python <https://docs.python.org/2/tutorial/classes.html#class-objects>`_
352413

0 commit comments

Comments
 (0)