11[[ch_data_model]]
2- == O modelo de dados de Python
2+ == O modelo de dados
33:example-number: 0
44:figure-number: 0
55
@@ -47,9 +47,8 @@ nomes dos métodos especiais são sempre precedidos e seguidos de dois sublinhad
4747Por exemplo, a sintaxe `obj[key]` está amparada no método especial `+__getitem__+`.
4848Para resolver `my_collection[key]`, o interpretador chama `+my_collection.__getitem__(key)+`.
4949
50- [role="pagebreak-before"]
51- Implementamos métodos especiais quando queremos que nossos objetos suportem e interajam com
52- elementos fundamentais da linguagem, como:
50+ <<<
51+ Implementamos métodos especiais para que os objetos suportem:
5352
5453* Coleções
5554
@@ -74,25 +73,21 @@ elementos fundamentais da linguagem, como:
7473[NOTE]
7574====
7675O((("magic methods")))((("dunder methods")))
77- termo _método mágico_ é uma gíria usada para se referir aos métodos especiais,
78- mas como falamos de um método específico, por exemplo `+__getitem__+`?
79- Aprendi a dizer "dunder-getitem" com o autor e professor Steve Holden.
80- "Dunder" é uma contração da frase em inglês "double underscore before and after"
81- (_sublinhado duplo antes e depois_).
82- Por isso os métodos especiais são também conhecidos como _métodos dunder_.
83- O capítulo
84- «Análise Léxica» [.small]#[fpy.li/2d]#
76+ termo _método mágico_ é gíria para "métodos especial.
77+ Para falar de um método específico, por exemplo `+__getitem__+`,
78+ pythonistas comoo autor Steve Holden dizem "dunder-getitem".
79+ "Dunder" é uma contração de _double underscore before and after_
80+ (sublinhado duplo antes e depois).
81+ O capítulo «Análise Léxica» [.small]#[fpy.li/2d]#
8582de _A Referência da Linguagem Python_ adverte:
8683"_Qualquer_ uso de nomes no formato `+__*__+` que não siga explicitamente o uso documentado,
8784em qualquer contexto, está sujeito a quebra sem aviso prévio."
8885====
8986
90- <<<
91-
9287=== Novidades neste capítulo
9388
9489Esse((("Python Data Model", "significant changes to"))) capítulo sofreu poucas alterações desde a primeira edição,
95- pois é uma introdução ao Modelo de Dados de Python, que é muito estável.
90+ pois é o Modelo de Dados de Python é muito estável.
9691As mudanças mais significativas foram:
9792
9893* Métodos especiais que suportam programação assíncrona e outras novas funcionalidades
@@ -101,6 +96,7 @@ foram acrescentados às tabelas na <<overview_special_methods>>.
10196* A <<collection_uml>>, mostrando o uso de métodos especiais na <<collection_api>>,
10297incluindo a classe base abstrata `collections.abc.Collection`, introduzida no Python 3.6.
10398
99+ <<<
104100Além disso, aqui((("f-string syntax", "benefits of"))) e por toda essa segunda edição,
105101adotei a sintaxe _f-string_, introduzida no Python 3.6,
106102que é mais legível e muitas vezes mais conveniente que as notações de formatação de strings mais antigas:
@@ -118,11 +114,6 @@ ou quando tem de vir de um arquivo de configuração ou de um banco de dados.
118114Essas são necessidades reais, mas não acontecem com frequência.
119115====
120116
121- ////
122- PROD: As is often the case, the TIP above may or may not run over the next paragraphs,
123- depending on some random factor I don't know how to control.
124- ////
125-
126117[[pythonic_card_deck]]
127118=== Um baralho pythônico
128119
@@ -144,6 +135,7 @@ include::../code/01-data-model/frenchdeck.py[]
144135----
145136====
146137
138+ <<<
147139A((("collections.namedtuple"))) primeira coisa a notar é o uso de `collections.namedtuple`
148140para construir uma classe simples representando cartas individuais.
149141Usamos `namedtuple` para criar classes de objetos que são apenas um agrupamento de atributos,
@@ -238,6 +230,7 @@ Card(rank='4', suit='spades')
238230...
239231----
240232
233+ <<<
241234Também podemos iterar sobre o baralho na ordem inversa:
242235
243236[source, python]
@@ -371,11 +364,8 @@ Essas funções chamam o método especial correspondente,
371364mas também fornecem outros serviços e—para tipos embutidos—são mais rápidas que chamadas a métodos.
372365
373366Na próxima seção veremos alguns dos usos mais importantes dos métodos especiais:
374-
375- * Emular tipos numéricos
376- * Representar objetos na forma de strings
377- * Determinar o valor booleano de um objeto
378- * Implementar coleções
367+ emular tipos numéricos, representar objetos na forma de strings,
368+ determinar o valor booleano de um objeto, e implementar coleções.
379369
380370
381371[[data_model_emulating_sec]]
@@ -399,8 +389,8 @@ Faremos isso no «Capítulo 17» [.small]#[vol.3, fpy.li/4s]#.
399389======
400390
401391[[vectors_fig]]
402- .Soma de vetores bidimensionais; `Vector(2, 4) + Vector(2, 1)` devolve `Vector(4, 5)`.
403- image::../images/flpy_0101.png[vetores 2D,align="center",pdfwidth=9cm ]
392+ .Soma de vetores: `Vector(2, 4) + Vector(2, 1)` devolve `Vector(4, 5)`.
393+ image::../images/flpy_0101.png[vetores 2D,align="center",pdfwidth=7cm ]
404394
405395Vamos começar a projetar a API para essa classe escrevendo uma sessão de console simulada,
406396que depois podemos usar como um doctest.
@@ -453,6 +443,7 @@ include::../code/01-data-model/vector2d_pt.py[]
453443----
454444====
455445
446+ <<<
456447Implementamos cinco métodos especiais, além do costumeiro `+__init__+`.
457448Veja que nenhum deles é chamado diretamente dentro da classe ou durante seu uso normal,
458449ilustrado pelos doctests.
@@ -602,8 +593,7 @@ Cada uma das ABCs no topo da hierarquia tem um único método especial.
602593A ABC `Collection` (introduzida no Python 3.6) unifica as três interfaces essenciais
603594que toda coleção deveria implementar:
604595
605- * `Iterable`, para((("Iterable interface")))((("interfaces", "Iterable interface"))) suportar `for`,
606- «desempacotamento» [.small]#[fpy.li/2h]#,
596+ * `Iterable`, para((("Iterable interface")))((("interfaces", "Iterable interface"))) suportar a instrução `for`,
607597e outras formas de iteração
608598* `Sized` para((("Sized interface")))((("interfaces", "Sized interface"))) suportar a função embutida `len`
609599* `Container` para((("Container interface")))((("interfaces", "Container interface"))) suportar o operador `in`
@@ -652,7 +642,7 @@ A maioria desses métodos será tratado ao longo do livro, incluindo as adiçõe
652642métodos especiais assíncronos como `+__anext__+` (acrescentado no Python 3.5),
653643e o método de configuração de classes, `+__init_subclass__+` (do Python 3.6).
654644
655-
645+ <<<
656646[[special_names_tbl]]
657647.Nomes de métodos especiais (excluindo operadores)
658648[options="header", cols="2,3"]
0 commit comments