Skip to content

Commit bdbd71c

Browse files
committed
cap01: quebras semânticas
1 parent c6272de commit bdbd71c

File tree

1 file changed

+47
-21
lines changed

1 file changed

+47
-21
lines changed

capitulos/cap01.adoc

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33

44
[quote, Jim Hugunin, criador do Jython, co-criador do AspectJ, e arquiteto do .Net DLR—Dynamic Language Runtime]
55
____
6-
O senso estético de Guido para o design de linguagens é incrível. Conheci muitos projetistas capazes de criar linguagens teoricamente lindas, que ninguém jamais usaria. Mas Guido é uma daquelas raras pessoas capaz de criar uma linguagem só um pouco menos teoricamente linda que, por isso mesmo, é uma delícia para programar.
6+
O senso estético de Guido para o design de linguagens é incrível.
7+
Conheci muitos projetistas capazes de criar linguagens teoricamente lindas,
8+
que ninguém jamais usaria.
9+
Mas Guido é uma daquelas raras pessoas capaz de criar uma linguagem só um pouco menos teoricamente linda que,
10+
por isso mesmo, é uma delícia para programar.
711
footnote:[Traduzido de
812
https://fpy.li/1-1[Story of Jython] (EN),
913
prefácio de
@@ -85,12 +89,14 @@ Esse((("Python Data Model", "significant changes to"))) capítulo sofreu poucas
8589
pois é uma introdução ao Modelo de Dados de Python, que é muito estável.
8690
As mudanças mais significativas foram:
8791

88-
* Métodos especiais que suportam programação assíncrona e outras novas funcionalidades foram acrescentados às tabelas em <<overview_special_methods>>.
92+
* Métodos especiais que suportam programação assíncrona e outras novas funcionalidades
93+
foram acrescentados às tabelas em <<overview_special_methods>>.
8994

90-
* A <<collection_uml>>, mostrando o uso de métodos especiais em <<collection_api>>, incluindo a classe base abstrata `collections.abc.Collection`, introduzida n Python 3.6.
95+
* A <<collection_uml>>, mostrando o uso de métodos especiais em <<collection_api>>,
96+
incluindo a classe base abstrata `collections.abc.Collection`, introduzida no Python 3.6.
9197

9298
Além disso, aqui((("f-string syntax", "benefits of"))) e por toda essa segunda edição,
93-
adotei a sintaxe _f-string_, introduzida n Python 3.6,
99+
adotei a sintaxe _f-string_, introduzida no Python 3.6,
94100
que é mais legível e muitas vezes mais conveniente que as notações de formatação de strings mais antigas:
95101
o((("str.format() method")))((("&#x0025; (modulo) operator")))((("modulo (&#x0025;) operator")))
96102
método `str.format()` e o operador `%`.
@@ -500,7 +506,7 @@ Programadores com experiência anterior em linguagens que contém o método `toS
500506
tendem a implementar `+__str__+` e não `+__repr__+`.
501507
Se você for implementar apenas um desses métodos especiais, escolha `+__repr__+`.
502508
503-
https://fpy.li/1-5["What is the difference between `+__str__+` and `+__repr__+` in Python?" (_Qual a diferença entre `+__str__+` e `+__repr__+` em Python?_)] (EN)
509+
https://fpy.li/1-5["What is the difference between `+__str__+` and `+__repr__+` ino Python?" (_Qual a diferença entre `+__str__+` e `+__repr__+` em Python?_)] (EN)
504510
é uma questão no Stack Overflow com excelentes contribuições dos pythonistas
505511
Alex Martelli e Martijn Pieters.((("", startref="repr01")))
506512
====
@@ -574,7 +580,7 @@ mostrando como elas são criadas a partir de métodos especiais.
574580
image::../images/flpy_0102.png[Diagram de classes UML com todas as superclasses e algumas subclasses de `abc.Collection`]
575581

576582
Cada uma das ABCs no topo da hierarquia tem um único método especial.
577-
A ABC `Collection` (introduzida n Python 3.6) unifica as três interfaces essenciais,
583+
A ABC `Collection` (introduzida no Python 3.6) unifica as três interfaces essenciais,
578584
que toda coleção deveria implementar:
579585

580586
* `Iterable`, para((("Iterable interface")))((("interfaces", "Iterable interface"))) suportar `for`,
@@ -624,7 +630,8 @@ Para ter uma visão geral do que está disponível, veja tabelas a seguir.
624630
A <<special_names_tbl>> mostra nomes de métodos especiais, excluindo aqueles usados para implementar
625631
operadores infixos ou funções matemáticas fundamentais como `abs`.
626632
A maioria desses métodos será tratado ao longo do livro, incluindo as adições mais recentes:
627-
métodos especiais assíncronos como `+__anext__+` (acrescentado n Python 3.5), e o método de personalização de classes, `+__init_subclass__+` (d Python 3.6).
633+
métodos especiais assíncronos como `+__anext__+` (acrescentado no Python 3.5),
634+
e o método de configuração de classes, `+__init_subclass__+` (do Python 3.6).
628635

629636
////
630637
PROD: Please make sure funcion names such as divmod() and __truediv__ are not
@@ -657,7 +664,7 @@ I tried to use keep-together in <special_operators_tbl> but it was rendering a 0
657664
Operadores infixos e numéricos são suportados pelos métodos especiais listados na
658665
<<special_operators_tbl>>.
659666
Aqui os nomes mais recentes são `+__matmul__+`, `+__rmatmul__+`, e `+__imatmul__+`,
660-
adicionados n Python 3.5 para suportar o uso de `@` como operador de multiplicação de matrizes,
667+
adicionados no Python 3.5 para suportar o uso de `@` como operador de multiplicação de matrizes,
661668
como veremos no <<ch_op_overload>>.((("special methods", "special method names and symbols for operators")))
662669

663670
[[special_operators_tbl]]
@@ -677,7 +684,8 @@ como veremos no <<ch_op_overload>>.((("special methods", "special method names a
677684

678685
[NOTE]
679686
====
680-
Python invoca um método especial de operador reverso no segundo argumento quando o método especial correspondente não pode ser usado no primeiro operando.
687+
Python invoca um método especial de operador reverso no segundo argumento
688+
quando o método especial correspondente não pode ser usado no primeiro operando.
681689
Atribuições aumentadas são atalho combinando um operador infixo com uma atribuição de variável, por exemplo `a += b`.
682690
683691
O <<ch_op_overload>> explica em detalhes os operadores reversos e a atribuição aumentada.((("", startref="PDMspmtov01")))
@@ -694,35 +702,49 @@ Nenhum método é chamado para os objetos embutidos do CPython: o tamanho é sim
694702
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
695703
`str`, `list`, `memoryview`, e assim por diante.
696704

697-
Em outras palavras, `len` não é chamado como um método porque recebe um tratamento especial como parte do Modelo de Dados de Python, da mesma forma que `abs`.
698-
Mas graças ao método especial pass:[<code>__len__</code>], também é possível fazer `len` funcionar com nossos objetos personalizados.
705+
Em outras palavras, `len` não é chamado como um método porque recebe um tratamento especial como parte do Modelo de Dados de Python,
706+
da mesma forma que `abs`.
707+
Mas graças ao método especial pass:[<code>__len__</code>], também é possível fazer `len` funcionar com objetos nossas classes.
699708
Isso é um compromisso justo entre a necessidade de objetos embutidos eficientes e a consistência da linguagem.
700709
Também de "O Zen de Python": "Casos especiais não são especiais o bastante para quebrar as regras."
701710

702711

703712
[NOTE]
704713
====
705-
Pensar em `abs` e `len` como operadores unários nos deixa mais inclinados a perdoar seus aspectos funcionais, contrários à sintaxe de chamada de método que esperaríamos em uma linguagem orientada a objetos.
706-
De fato, a linguagem ABC—uma ancestral direta de Python, que antecipou muitas das funcionalidades desta última—tinha o operador `#`, que era o equivalente de `len` (se escrevia `#s`).
707-
Quando usado como operador infixo, `x#s` contava as ocorrências de `x` em `s`, que em Python obtemos com `s.count(x)`, para qualquer sequência `s`.
714+
Pensar em `abs` e `len` como operadores unários nos deixa mais inclinados a perdoar seus aspectos funcionais,
715+
contrários à sintaxe de chamada de método que esperaríamos em uma linguagem orientada a objetos.
716+
De fato, Python herdou muito de sua sintaxe e estruturas de dados da linguagem ABC,
717+
onde existe o operador `#`,
718+
que equivale ao `len`: em ABC, `len(s)` escreve-se `#s`.
719+
Quando usado como operador infixo,
720+
`x#s` conta as ocorrências de `x` em `s`,
721+
que em Python obtemos com `s.count(x)`,
722+
para qualquer sequência `s`.
708723
====
709724

710725
[role="pagebreak-before less_space"]
711726
=== Resumo do capítulo
712727

713-
Ao((("Python Data Model", "overview of"))) implementar métodos especiais, seus objetos podem se comportar como tipos embutidos, permitindo o estilo de programação expressivo que a comunidade considera pythônico.
728+
Ao((("Python Data Model", "overview of"))) implementar métodos especiais,
729+
seus objetos podem se comportar como tipos embutidos,
730+
permitindo o estilo de programação expressivo que a comunidade considera pythônico.
714731

715-
Uma exigência básica para um objeto em Python é fornecer strings representando a si mesmo que possam ser usadas, uma para depuração e registro (_log_), outra para apresentar aos usuários finais. É para isso que os métodos especiais `+__repr__+` e `+__str__+` existem no modelo de dados.
732+
Uma exigência básica para um objeto em Python é fornecer strings representando a si mesmo que possam ser usadas,
733+
uma para depuração e registro (_log_), outra para apresentar aos usuários finais.
734+
É para isso que os métodos especiais `+__repr__+` e `+__str__+` existem no modelo de dados.
716735

717736
Emular sequências, como mostrado com o exemplo do `FrenchDeck`, é um dos usos mais comuns dos métodos especiais.
718737
Por exemplo, bibliotecas de banco de dados frequentemente devolvem resultados de consultas na forma de coleções similares a sequências.
719738
Tirar o máximo proveito dos tipos de sequências existentes é o assunto do <<ch_sequences>>.
720739
Como implementar suas próprias sequências será visto na <<ch_seq_methods>>,
721740
onde criaremos uma extensão multidimensional da classe `Vector`.
722741

723-
Graças à sobrecarga de operadores, Python oferece uma rica seleção de tipos numéricos, desde os tipos embutidos até `decimal.Decimal` e `fractions.Fraction`,
742+
Graças à sobrecarga de operadores, Python oferece uma rica seleção de tipos numéricos,
743+
desde os tipos embutidos até `decimal.Decimal` e `fractions.Fraction`,
724744
todos eles suportando operadores aritméticos infixos.
725-
As bibliotecas de ciência de dados _NumPy_ suportam operadores infixos com matrizes e tensores. A implementação de operadores—incluindo operadores reversos e atribuição aumentada—será vista no <<ch_op_overload>>, usando melhorias do exemplo `Vector`.
745+
As bibliotecas de ciência de dados _NumPy_ suportam operadores infixos com matrizes e tensores.
746+
A implementação de operadores—incluindo operadores reversos e atribuição aumentada—será vista no <<ch_op_overload>>,
747+
usando melhorias do exemplo `Vector`.
726748

727749
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.
728750

@@ -761,9 +783,11 @@ explica o conceito de um protocolo de metaobjetos, do qual o Modelo de Dados de
761783
Modelo de dados ou modelo de objetos?
762784
763785
764-
Aquilo((("Soapbox sidebars", "data model versus object model")))((("Python Data Model", "Soapbox discussion"))) que a documentação de Python chama de "Modelo de Dados de Python", a maioria dos autores diria que é o "Modelo de objetos de Python"
786+
Aquilo((("Soapbox sidebars", "data model versus object model")))((("Python Data Model", "Soapbox discussion")))
787+
que a documentação de Python chama de "Modelo de Dados de Python", a maioria dos autores diria que é o "Modelo de objetos de Python"
765788
766-
O _Python in a Nutshell_, 3rd ed. de Martelli, Ravenscroft, e Holden, e o _Python Essential Reference_, 4th ed., 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."
789+
O _Python in a Nutshell_, 3rd ed. de Martelli, Ravenscroft, e Holden, e o _Python Essential Reference_, 4th ed.,
790+
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."
767791
Na Wikipedia, a primeira definição de
768792
https://fpy.li/1-10["modelo de objetos"]
769793
(EN) é: "as propriedades dos objetos em geral em uma linguagem de programação de computadores específica."
@@ -776,7 +800,9 @@ mais relevante para nossas discussões.
776800
Métodos de "trouxas"
777801
778802
https://fpy.li/1-11[_The Original Hacker's Dictionary_ (_Dicionário Hacker Original_)]
779-
(EN) define ((("Soapbox sidebars", "magic methods")))((("magic methods"))) _mágica_ como "algo ainda não explicado ou muito complicado para explicar" ou "uma funcionalidade, em geral não divulgada, que permite fazer algo que de outra forma seria impossível."
803+
(EN) define ((("Soapbox sidebars", "magic methods")))((("magic methods"))) _mágica_ como
804+
"algo ainda não explicado ou muito complicado para explicar" ou "uma funcionalidade,
805+
em geral não divulgada, que permite fazer algo que de outra forma seria impossível."
780806
781807
Ruby tem o equivalente aos métodos especiais, chamados de _métodos mágicos_ naquela comunidade.
782808
Alguns na comunidade Python também adotam esse termo.

0 commit comments

Comments
 (0)