You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/introducao-classes-metodos-python-basico.rst
+97-10Lines changed: 97 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,11 +10,15 @@ Introdução a Classes e Métodos em Python (básico)
10
10
:github: rg3915
11
11
:summary: Abordaremos aqui o básico sobre o uso de classes e métodos e a manipulação de dados em Python.
12
12
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 26 de Maio de 2018.
14
18
15
19
PS: *Considere a sintaxe para Python 3*.
16
20
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. Se você criar um outro ojbeto chamado Fabio, esse objeto também será uma instancia da classe Pessoa.
18
22
19
23
Na sua sintaxe mais elementar definimos uma classe conforme abaixo:
20
24
@@ -43,16 +47,14 @@ Juntando os dois temos:
43
47
.. code-block:: python
44
48
45
49
classNomeDaClasse(object):
46
-
atributo1 =None
47
50
48
51
defmetodo(self, args):
49
-
pass
52
+
pass
50
53
51
54
52
55
53
56
A primeira pergunta que você vai ter é o porque do ``self`` em ``metodo``. A resposta curta é, todo metodo criado dentro de uma classe deve definir como primeiro parametro o ``self``. Para a resposta longa, por favor, leia a excelente explicação que o Pedro Werneck fez: `O porquê do self explícito em Python <http://archive.is/cX2mq>`_
54
57
55
-
56
58
A segunda pergunta é: para que serve o ``pass``?
57
59
58
60
A resposta é que, em Python, ao contrario de várias outras liguagens de programação, os blocos de código **NÃO** são definidos com os caracteres ``{`` e ``}``, mas sim com indentação e o caractere ``:``. Devido a esse fato, python necessitava de algo para explicitar quando se quer definir um bloco vazio. O ``pass`` foi criado exatamente para explicitar essa situação.
@@ -62,17 +64,42 @@ Um exemplo de uma função vazia feita em linguagem C e a mesma função vazia f
62
64
.. code-block:: C
63
65
64
66
void metodo(int num){
65
-
67
+
66
68
}
67
69
68
70
.. code-block:: python
69
71
70
72
defmetodo(num):
71
73
pass
72
74
73
-
Voltando a explicação sobre a classe: O ``atributo1`` é um atributo com valor inicial ``None`` (nada). Poderia ser ``atributo1 = 0``, por exemplo.
75
+
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>`_.
76
+
77
+
78
+
Exemplo 0 - Pessoa
79
+
------------------
80
+
81
+
No exemplo mencionado no começo desse post o código mais simples seria o seguinte:
82
+
83
+
.. code-block:: python
84
+
85
+
classPessoa(object):
86
+
87
+
def__init__(self, nome):
88
+
self.nome = nome
89
+
90
+
def__str__(self):
91
+
returnself.nome
92
+
93
+
94
+
regis = Pessoa('Regis')
95
+
print(regis)
96
+
fabio = Pessoa('Fabio')
97
+
print(fabio)
98
+
99
+
Note que ``regis`` é uma instância da classe ``Pessoa``, e ``fabio`` é uma outra instância. Ou seja, temos dois **objetos**: ``regis`` e ``fabio``.
100
+
101
+
Os dois métodos serão explicados no próximo exemplo.
74
102
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
103
77
104
Exemplo 1 - Calculadora simples
78
105
-------------------------------
@@ -187,16 +214,21 @@ Usando o **terminal no modo interativo** façamos:
187
214
>>>from calculadora2 import Calculadora
188
215
>>> c = Calculadora()
189
216
>>>print('Soma:', c.soma(2,3))
217
+
Soma: 5
190
218
>>>print('Subtração:', c.subtrai(2,10))
219
+
Subtração: -8
191
220
>>>print('Multiplicação:', c.multiplica(3,3))
221
+
Multiplicação: 9
192
222
>>>print('Divisão:', c.divide(128,2))
223
+
Divisão: 64.0
224
+
>>>
193
225
194
226
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.
195
227
196
228
Exemplo 3 - Classe Pedido
197
229
-------------------------
198
230
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.
231
+
Agora veremos um outro exemplo, mas aqui iremos apenas instanciar os objetos e armazená-los em memória numa lista.
200
232
201
233
Veremos o código na íntegra e depois os comentários.
202
234
@@ -246,6 +278,9 @@ Podemos rodar o Python no modo `modo interativo <https://docs.python.org/3/tutor
246
278
>>> u2 = User('Fabio',20)
247
279
>>> u2.save()
248
280
>>>print(User.all())
281
+
[<User: 1- Regis -35>
282
+
, <User: 2- Fabio -20>
283
+
]
249
284
250
285
Agora os comentários:
251
286
@@ -342,11 +377,63 @@ Note que nesse ``print`` a lista está vazia.
342
377
343
378
Após chamar o ``save`` para as duas instâncias elas são guardadas e o método ``User.all()`` retorna essa lista.
344
379
380
+
Exemplo 4 - Televisão
381
+
---------------------
382
+
383
+
Escrevi mais um exemplo para fixar melhor o entendimento: `tv.py <https://github.com/rg3915/python-classes-metodos/blob/master/pythonBasico/tv/tv.py>`_.
384
+
385
+
.. code-block:: python
386
+
387
+
classTelevisao():
388
+
389
+
def__init__(self):
390
+
self.ligada =False
391
+
self.canal =2
392
+
393
+
defmuda_canal_para_baixo(self):
394
+
self.canal -=1
395
+
396
+
defmuda_canal_para_cima(self):
397
+
self.canal +=1
398
+
399
+
if__name__=='__main__':
400
+
tv = Televisao()
401
+
print('Canal inicial:', tv.canal)
402
+
print('Ligada:', tv.ligada)
403
+
404
+
tv.ligada =True
405
+
tv.canal =5
406
+
407
+
print('Ligada:', tv.ligada)
408
+
print('Canal inicial:', tv.canal)
409
+
tv.muda_canal_para_cima()
410
+
print('Canal +', tv.canal)
411
+
tv.muda_canal_para_cima()
412
+
print('Canal +', tv.canal)
413
+
tv.muda_canal_para_baixo()
414
+
print('Canal -', tv.canal)
415
+
416
+
Este programa está muito bem explicado no video `Python para Zumbis <https://www.youtube.com/watch?v=Zr_FiKbgRbU>`_.
417
+
418
+
A seguir o resultado do programa:
419
+
420
+
.. code-block:: python
421
+
422
+
$ python tv.py
423
+
('Canal inicial:', 2)
424
+
('Ligada:', False)
425
+
('Ligada:', True)
426
+
('Canal inicial:', 5)
427
+
('Canal +', 6)
428
+
('Canal +', 7)
429
+
('Canal -', 6)
430
+
431
+
345
432
Agradeço a colaboração de `Fabio Cerqueira <https://gist.github.com/fabiocerqueira/1b05352a26892dea6813>`_.
346
433
347
434
Veja os exemplos em `https://github.com/rg3915/pythonDesktopApp <https://github.com/rg3915/pythonDesktopApp/tree/master/pythonBasico>`_.
0 commit comments