Skip to content

Commit cfc79e6

Browse files
committed
formatação
1 parent 99f9453 commit cfc79e6

1 file changed

Lines changed: 42 additions & 39 deletions

File tree

vol1/cap01.adoc

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ que ninguém jamais usaria.
1111
Mas Guido é uma daquelas raras pessoas capazes de criar uma linguagem só um pouco menos teoricamente linda que,
1212
por isso mesmo, é uma delícia para programar.
1313
footnote:[Traduzido de
14-
«Story of Jython» [.small]#[fpy.li/1-1]# (EN),
14+
«Story of Jython» [.small]#[fpy.li/1-1]#,
1515
prefácio de
16-
«Jython Essentials» [.small]#[fpy.li/1-2]#
17-
(EN), de Samuele Pedroni e Noel Rappin (O'Reilly).]
16+
«Jython Essentials» [.small]#[fpy.li/1-2]#,
17+
de Samuele Pedroni e Noel Rappin (O'Reilly).]
1818
____
1919

2020
Uma das melhores qualidades de Python é sua consistência.
@@ -328,8 +328,8 @@ startref="len01")))((("", startref="pycard01")))((("", startref="SMgetitem01")))
328328
Como foi implementado até aqui, um `FrenchDeck` não pode ser embaralhado,
329329
porque as cartas e suas posições não podem ser alteradas,
330330
exceto violando o encapsulamento e manipulando o atributo `_cards` diretamente.
331-
No Capítulo 13 [.small]#[vol.2, fpy.li/4q]# vamos corrigir isso acrescentando um método `+__setitem__+`
332-
de uma linha.
331+
No «Capítulo 13» [.small]#[vol.2, fpy.li/4q]#
332+
vamos corrigir isso acrescentando um método `+__setitem__+` de uma linha.
333333
Você consegue imaginar como ele seria implementado?
334334
=====================================================================
335335

@@ -384,7 +384,7 @@ Na próxima seção veremos alguns dos usos mais importantes dos métodos especi
384384
Vários((("special methods", "emulating numeric types", id="SMnumeric01")))((("numeric types",
385385
"emulating using special methods", id="NTemul01")))
386386
métodos especiais permitem que objetos criados pelo usuário respondam a operadores como `+`.
387-
Vamos tratar disso com mais detalhes no Capítulo 16 [.small]#[vol.2, fpy.li/4r]#.
387+
Vamos tratar disso com mais detalhes no «Capítulo 16» [.small]#[vol.2, fpy.li/4r]#.
388388
Aqui nosso objetivo é continuar ilustrando o uso dos métodos especiais, através de outro exemplo simples.
389389

390390
Vamos((("vectors", "representing two-dimensional", id="Vtwo01"))) implementar uma classe para representar
@@ -395,7 +395,7 @@ vetores bidimensionais—isto é, vetores euclidianos como aqueles usados em mat
395395
======
396396
O tipo embutido `complex` pode ser usado para representar vetores bidimensionais,
397397
mas nossa classe pode ser estendida para representar vetores N-dimensionais.
398-
Faremos isso no Capítulo 17 [.small]#[vol.3, fpy.li/4s]#.
398+
Faremos isso no «Capítulo 17» [.small]#[vol.3, fpy.li/4s]#.
399399
======
400400

401401
[[vectors_fig]]
@@ -463,14 +463,14 @@ para demonstrar o uso básico de `+__add__+` e `+__mul__+`.
463463
Nos dois casos, os métodos criam e devolvem uma nova instância de `Vector`,
464464
e não modificam nenhum dos operandos: `self` e `other` são apenas lidos.
465465
Esse é o comportamento esperado de operadores infixos: criar novos objetos e não tocar em seus operandos.
466-
Vou falar mais sobre esse tópico no Capítulo 16 [.small]#[vol.2, fpy.li/4r]#.
466+
Vou falar mais sobre esse tópico no «Capítulo 16» [.small]#[vol.2, fpy.li/4r]#.
467467

468468
[WARNING]
469469
====
470470
Da forma como está implementado, o <<ex_vector2d>> permite multiplicar um `Vector` por um número,
471471
mas não um número por um `Vector`,
472472
violando a propriedade comutativa da multiplicação escalar.
473-
Vamos consertar isso com o método especial `+__rmul__+` no Capítulo 16 [.small]#&#91;vol.2, fpy.li/4r&#93;#.
473+
Vamos consertar isso com o método especial `+__rmul__+` no «Capítulo 16» [.small]#&#91;vol.2, fpy.li/4r&#93;#.
474474
====
475475

476476
Nas seções seguintes vamos discutir os outros métodos especiais em
@@ -521,8 +521,9 @@ Programadores com experiência anterior em linguagens que contém o método `toS
521521
tendem a implementar `+__str__+` e não `+__repr__+`.
522522
Se você for implementar apenas um desses métodos especiais, escolha `+__repr__+`.
523523
524-
https://fpy.li/1-5["What is the difference between `+__str__+` and `+__repr__+` in Python?"
525-
(_Qual a diferença entre `+__str__+` e `+__repr__+` em Python?_)] (EN)
524+
«_What is the difference between `+__str__+` and `+__repr__+` in Python?_
525+
(Qual a diferença entre `+__str__+` e `+__repr__+` em Python?)»
526+
[.small]#&#91;fpy.li/1-5&#93;#
526527
é uma questão no Stack Overflow com excelentes contribuições dos pythonistas
527528
Alex Martelli e Martijn Pieters.((("", startref="repr01")))
528529
====
@@ -553,7 +554,7 @@ porque qualquer objeto pode ser usado em um contexto booleano.
553554

554555
Observe que o método especial `+__bool__+` permite que seus objetos sigam as
555556
regras de teste do valor verdade definidas no
556-
«capítulo "Tipos Embutidos"» [.small]#&#91;fpy.li/2g&#93;#
557+
capítulo «Tipos Embutidos» [.small]#&#91;fpy.li/2g&#93;#
557558
da documentação da _Biblioteca Padrão de Python_.
558559

559560
[NOTE]
@@ -589,7 +590,7 @@ id="SMcollection01")))((("Collection API", id="Cspeical01")))((("ABCs (abstract
589590
as interfaces dos tipos de coleções essenciais na linguagem.
590591
Todas as classes no diagrama são ABCs—_classes base abstratas_
591592
(_ABC_ é sigla para _Abstract Base Class_).
592-
As ABCs e o módulo `collections.abc` são tratados no Capítulo 13 [.small]#&#91;vol.2, fpy.li/4q&#93;#.
593+
As ABCs e o módulo `collections.abc` são tratados no «Capítulo 13» [.small]#&#91;vol.2, fpy.li/4q&#93;#.
593594
O objetivo dessa pequena seção é dar uma visão panorâmica das interfaces das coleções mais importantes de Python,
594595
mostrando como elas são criadas a partir de métodos especiais.
595596

@@ -640,7 +641,7 @@ Python.((("", startref="PDMspecmeth01")))((("", startref="SMcollection01")))((("
640641

641642
O((("Python Data Model", "special methods overview", id="PDMspmtov01")))((("special methods",
642643
"special method names (operators excluded)")))
643-
«capítulo "Modelo de Dados"» [.small]#&#91;fpy.li/2j&#93;#
644+
capítulo «Modelo de Dados» [.small]#&#91;fpy.li/2j&#93;#
644645
de _A Referência da Linguagem Python_ lista mais de 80 nomes de métodos especiais.
645646
Mais da metade deles implementa operadores aritméticos, de comparação, ou bit-a-bit.
646647
Para ter uma visão geral do que está disponível, veja as tabelas a seguir.
@@ -672,7 +673,7 @@ Operadores infixos e numéricos são suportados pelos métodos especiais listado
672673
<<special_operators_tbl>>.
673674
Aqui os nomes mais recentes são `+__matmul__+`, `+__rmatmul__+`, e `+__imatmul__+`,
674675
adicionados no Python 3.5 para suportar o uso de `@` como operador de multiplicação de matrizes,
675-
como veremos no Capítulo 16 [.small]#&#91;vol.2, fpy.li/4r&#93;#.((("special methods", "special method names and symbols for operators")))
676+
como veremos no «Capítulo 16» [.small]#&#91;vol.2, fpy.li/4r&#93;#.((("special methods", "special method names and symbols for operators")))
676677

677678
[[special_operators_tbl]]
678679
.Nomes e símbolos de métodos especiais para operadores
@@ -695,15 +696,17 @@ Python invoca um método especial de operador reverso no segundo argumento
695696
quando o método especial correspondente não pode ser usado no primeiro operando.
696697
Atribuições aumentadas são um atalho combinando um operador infixo com uma atribuição de variável, por exemplo `a += b`.
697698
698-
O Capítulo 16 [.small]#&#91;vol.2, fpy.li/4r&#93;# explica em detalhes os operadores reversos e a atribuição aumentada.((("", startref="PDMspmtov01")))
699+
O «Capítulo 16» [.small]#&#91;vol.2, fpy.li/4r&#93;#
700+
explica em detalhes os operadores reversos e a atribuição aumentada.((("", startref="PDMspmtov01")))
699701
====
700702

701703

702704
=== Por que len não é um método?
703705

704706
Em 2013, fiz((("Python Data Model", "making len work with custom objects")))((("&#x005F;&#x005F;len&#x005F;&#x005F;")))
705707
essa pergunta a Raymond Hettinger, um dos desenvolvedores principais do Python,
706-
e sua resposta foi basicamente uma citação do «"The Zen of Python" (_O Zen do Python_)» [.small]#&#91;fpy.li/1-8&#93;# (EN): "a praticidade vence a pureza."
708+
e sua resposta foi basicamente uma citação do
709+
«"The Zen of Python" (_O Zen do Python_)» [.small]#&#91;fpy.li/1-8&#93;#: "a praticidade vence a pureza."
707710
Na <<how_special_used>>, descrevi como `len(x)` roda muito rápido quando `x` é uma instância de um tipo embutido.
708711
Nenhum método é chamado para os objetos embutidos do CPython: o tamanho é simplesmente lido de um campo em uma struct C.
709712
Obter o número de itens em uma coleção é uma operação comum, e precisa funcionar de forma eficiente para tipos tão básicos e diferentes como
@@ -743,43 +746,43 @@ uma para depuração e registro (_log_), outra para apresentar aos usuários fin
743746
Emular sequências, como mostrado com o exemplo do `FrenchDeck`, é um dos usos mais comuns dos métodos especiais.
744747
Por exemplo, bibliotecas de banco de dados frequentemente devolvem resultados de consultas na forma de coleções similares a sequências.
745748
Tirar o máximo proveito dos tipos de sequências existentes é o assunto do <<ch_sequences>>.
746-
Como implementar suas próprias sequências será visto no Capítulo 12 [.small]#&#91;vol.2, fpy.li/4t&#93;#,
749+
Como implementar suas próprias sequências será visto no «Capítulo 12» [.small]#&#91;vol.2, fpy.li/4t&#93;#,
747750
onde criaremos uma extensão multidimensional da classe `Vector`.
748751

749752
Graças à sobrecarga de operadores, Python oferece uma rica seleção de tipos numéricos,
750753
desde os tipos embutidos até `decimal.Decimal` e `fractions.Fraction`,
751754
todos eles suportando operadores aritméticos infixos.
752755
A biblioteca de ciência de dados _NumPy_ suporta operadores infixos com matrizes e tensores.
753-
A implementação de operadores—incluindo operadores reversos e atribuição aumentada—será vista no Capítulo 16 [.small]#&#91;vol.2, fpy.li/4r&#93;#,
756+
A implementação de operadores—incluindo operadores reversos e atribuição aumentada—será vista no
757+
«Capítulo 16» [.small]#&#91;vol.2, fpy.li/4r&#93;#,
754758
usando melhorias do exemplo `Vector`.
755759

756760
Também veremos o uso e a implementação da maioria dos outros métodos especiais do Modelo de Dados de Python ao longo deste livro.
757761

758762
=== Para saber mais
759763

760764
O((("Python Data Model", "further reading on")))
761-
«capítulo "Modelo de Dados"» [.small]#&#91;fpy.li/2j&#93;#
762-
em _A Referência da Linguagem Python_ é a fonte canônica para o assunto desse capítulo e de uma boa parte deste livro.
765+
capítulo «Modelo de Dados» [.small]#&#91;fpy.li/2j&#93;#
766+
em _A Referência da Linguagem Python_ é a fonte canônica
767+
para o assunto desse capítulo e de uma boa parte deste livro.
763768

764-
«Python in a Nutshell, 3rd ed.» [.small]#&#91;fpy.li/pynut3&#93;#
765-
(EN), de Alex Martelli, Anna Ravenscroft, e Steve Holden (O'Reilly)
769+
«Python in a Nutshell, 3rd ed.» [.small]#&#91;fpy.li/pynut3&#93;#,
770+
de Alex Martelli, Anna Ravenscroft, e Steve Holden (O'Reilly)
766771
tem uma excelente cobertura do modelo de dados.
767772
Sua descrição da mecânica de acesso a atributos é a mais competente que já vi,
768773
perdendo apenas para o próprio código-fonte em C do CPython.
769774
Martelli também é um contribuidor prolífico do Stack Overflow,
770775
com mais de 6200 respostas publicadas.
771-
Veja seu perfil de usuário no
772-
«Stack Overflow» [.small]#&#91;fpy.li/1-9&#93;#.
776+
Veja «seu perfil de usuário no _Stack Overflow_» [.small]#&#91;fpy.li/1-9&#93;#.
773777

774778
David Beazley tem dois livros tratando do modelo de dados em detalhes, no contexto de Python 3:
775-
«Python Essential Reference» [.small]#&#91;fpy.li/2k&#93;#
776-
(EN), 4th ed. (Addison-Wesley), e
777-
«Python Cookbook, 3rd ed» [.small]#&#91;fpy.li/pycook3&#93;#
778-
(EN) (O'Reilly), colaborando com Brian K. Jones.
779+
«Python Essential Reference» [.small]#&#91;fpy.li/2k&#93;#, 4th ed. (Addison-Wesley), e
780+
«Python Cookbook, 3rd ed» [.small]#&#91;fpy.li/pycook3&#93;# (O'Reilly), colaborando com Brian K. Jones.
779781

780-
«The Art of the Metaobject Protocol» [.small]#&#91;fpy.li/2m&#93;#
781-
(EN) (MIT Press) de Gregor Kiczales, Jim des Rivieres, e Daniel G. Bobrow
782-
explica o conceito de um protocolo de metaobjetos, do qual o Modelo de Dados de Python é um exemplo.
782+
«The Art of the Metaobject Protocol» [.small]#&#91;fpy.li/2m&#93;# (MIT Press)
783+
de Gregor Kiczales, Jim des Rivieres, e Daniel G. Bobrow
784+
explica o conceito de um protocolo de metaobjetos,
785+
do qual o Modelo de Dados de Python é um exemplo.
783786

784787
<<<
785788
.Ponto de Vista
@@ -796,17 +799,17 @@ O _Python in a Nutshell_, 3rd ed. de Martelli, Ravenscroft, e Holden, e o _Pytho
796799
de David Beazley são os melhores livros sobre o Modelo de Dados de Python, mas se referem a ele como o "modelo de objetos."
797800
Na Wikipedia, a primeira definição de
798801
«modelo de objetos» [.small]#&#91;fpy.li/1-10&#93;#
799-
(EN) é: "as propriedades dos objetos em geral em uma linguagem de programação de computadores específica."
802+
é: "as propriedades dos objetos em geral em uma linguagem de programação de computadores específica."
800803
É disso que o Modelo de Dados de Python trata.
801804
Neste livro, usarei "modelo de dados" porque esse é o título do
802-
«capítulo de _A Referência da Linguagem Python_» [.small]#&#91;fpy.li/2j&#93;#
805+
«capítulo de A Referência da Linguagem Python» [.small]#&#91;fpy.li/2j&#93;#
803806
mais relevante para nossas discussões.
804807
805808
[role="soapbox-title"]
806809
**Métodos de "trouxas"**
807810
808-
«_The Original Hacker's Dictionary_ (_Dicionário Hacker Original_)» [.small]#&#91;fpy.li/1-11&#93;#
809-
(EN) define ((("Soapbox sidebars", "magic methods")))((("magic methods"))) _mágica_ como
811+
«_The Original Hacker's Dictionary_ (Dicionário Hacker Original)» [.small]#&#91;fpy.li/1-11&#93;#
812+
define ((("Soapbox sidebars", "magic methods")))((("magic methods"))) _mágica_ como
810813
"algo ainda não explicado ou muito complicado para explicar" ou "uma funcionalidade,
811814
em geral não divulgada, que permite fazer algo que de outra forma seria impossível."
812815
@@ -845,8 +848,8 @@ e o autor inicial do AspectJ, uma extensão de Java implementando aquele paradig
845848
A programação orientada a aspecto é mais fácil de implementar em uma linguagem dinâmica como Python,
846849
e alguns frameworks fazem exatamente isso.
847850
Um exemplo importante é a
848-
«_zope.interface_» [.small]#&#91;fpy.li/1-12&#93;#
849-
(EN), parte do framework Zope sobre o qual o sistema de gerenciamento de conteúdo
850-
«Plone» [.small]#&#91;fpy.li/2n&#93;# é construído.
851+
«_zope.interface_» [.small]#&#91;fpy.li/1-12&#93;#,
852+
parte do framework Zope sobre o qual o sistema de gerenciamento de conteúdo
853+
«_Plone_» [.small]#&#91;fpy.li/2n&#93;# é construído.
851854
****
852855

0 commit comments

Comments
 (0)