Skip to content

Commit 409bd9c

Browse files
committed
revisão de xrefs para exemplos de outros capítulos no mesmo volume
1 parent 5c447b3 commit 409bd9c

File tree

17 files changed

+89
-60
lines changed

17 files changed

+89
-60
lines changed

online/cap02.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ estivessem aninhados na mesma ordem que eles aparecem na listcomp.
367367
quebrar a listcomp em duas linhas torna mais fácil ver como o resultado será ordenado.
368368

369369

370-
No <<ex_pythonic_deck>> (<<ch_data_model>>)
370+
No <<ex_pythonic_deck>> do <<ch_data_model>>
371371
usei a seguinte expressão para inicializar um baralho de cartas com uma lista
372372
contendo 52 cartas de todos os 13 valores possíveis para cada um dos quatro naipes,
373373
ordenada por naipe e então por valor:

online/cap05.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ Pule a próxima caixinha se você não estiver interessada em gambiarras.
432432
.Remendando uma tupla nomeada para injetar um método
433433
****
434434
435-
Lembre como criamos a classe `Card` class no <<ex_pythonic_deck>> (<<ch_data_model>>):
435+
Lembre como criamos a classe `Card` class no <<ex_pythonic_deck>> do <<ch_data_model>>:
436436
437437
[source, python]
438438
----

online/cap12.adoc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ Quando um `Vector` tem mais de seis componentes, a string produzida por `repr()`
118118
====
119119

120120
O <<ex_vector_v1>> lista a implementação de nossa primeira versão de `Vector`
121-
(esse exemplo usa como base o código mostrado no <<ex_vector2d_v0>> e
121+
(este exemplo usa como base o código mostrado no <<ex_vector2d_v0>> e
122122
<<ex_vector2d_v1>> do <<ch_pythonic_obj>>).
123123

124124
[[ex_vector_v1]]
@@ -212,10 +212,11 @@ protocolo de sequência no Python implica apenas no métodos `+__len__+` e
212212
assinatura e a semântica padrão, pode ser usada em qualquer lugar onde uma
213213
sequência é esperada. É irrelevante se `Spam` é uma subclasse dessa ou daquela
214214
outra classe; tudo o que importa é que ela fornece os métodos necessários. Vimos
215-
isso no <<ex_pythonic_deck>>, reproduzido aqui no <<ex_pythonic_deck_rep>>.
215+
isso no <<ex_pythonic_deck>> do <<ch_data_model>>,
216+
reproduzido no <<ex_pythonic_deck_rep>>.
216217

217218
[[ex_pythonic_deck_rep]]
218-
.Código do <<ex_pythonic_deck>>, reproduzido aqui por conveniência
219+
.Código do <<ex_pythonic_deck>> do <<ch_data_model>>, reproduzido aqui por conveniência
219220
====
220221
[source, python]
221222
----
@@ -492,7 +493,7 @@ primeiros componentes de um vetor:
492493
----
493494

494495
No `Vector2d`, oferecemos acesso somente para leitura a `x` e `y` através do
495-
decorador `@property` (veja o <<ex_vector2d_v3>>). Poderíamos incluir quatro
496+
decorador `@property` (veja o <<ex_vector2d_v3>> do <<ch_pythonic_obj>>). Poderíamos incluir quatro
496497
propriedades no `Vector`, mas isso seria tedioso. O método especial
497498
`+__getattr__+` é uma opção melhor.
498499

@@ -674,7 +675,7 @@ id="hash12")))((("&#x005F;&#x005F;eq&#x005F;&#x005F;", id="eq12"))) novamente
674675
implementar um método `+__hash__+`. Juntamente com o `+__eq__+` existente, isso
675676
tornará as instâncias de `Vector` _hashable_.
676677

677-
O `+__hash__+` do `Vector2d` (no <<ex_vector2d_v3_hash>>) computava o _hash_ de
678+
O `+__hash__+` do `Vector2d` (no <<ex_vector2d_v3_hash>> do <<ch_pythonic_obj>>) computava o _hash_ de
678679
uma `tuple` construída com os dois componentes, `self.x` and `self.y`. Agora
679680
podemos estar lidando com milhares de componentes, então criar uma `tuple` pode
680681
ser caro demais. Em vez disso, vou aplicar sucessivamente o operador `^` (xor)

online/cap13.adoc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ O `FrenchDeck` original do <<ch_data_model>> também não é subclasse de
298298
`+__getitem__+` e `+__len__+`. Veja o <<ex_pythonic_deck_repeat>>.
299299

300300
[[ex_pythonic_deck_repeat]]
301-
.Um baralho como uma sequência de cartas, como o <<ex_pythonic_deck>>.
301+
.Um baralho como uma sequência de cartas, como o <<ex_pythonic_deck>> do <<ch_data_model>>.
302302
====
303303
[source, python]
304304
----
@@ -1305,7 +1305,7 @@ concretas que satisfazem a interface. Essas classes estão ilustradas na
13051305
seguinte.
13061306

13071307
A classe `BingoCage` no <<ex_tombola_bingo>> é uma variação do
1308-
<<ex_bingo_callable>> usando um randomizador melhor. `BingoCage` implementa os
1308+
<<ex_bingo_callable>> do <<ch_func_objects>> usando um randomizador melhor. `BingoCage` implementa os
13091309
métodos abstratos obrigatórios `load` e `pick`.
13101310

13111311
[[ex_tombola_bingo]]
@@ -1328,9 +1328,9 @@ documentação do módulo `os`].
13281328
<4> Em vez da função `random.shuffle()` normal, usamos o método `.shuffle()` de
13291329
nossa instância de `SystemRandom`.
13301330

1331-
<5> `pick` é implementado como no <<ex_bingo_callable>>.
1331+
<5> `pick` é implementado como no <<ex_bingo_callable>> do <<ch_func_objects>>.
13321332

1333-
<6> `+__call__+` também é do <<ex_bingo_callable>>. Ele não é necessário para
1333+
<6> `+__call__+` também é do <<ex_bingo_callable>> do <<ch_func_objects>>. Ele não é necessário para
13341334
satisfazer a interface de `Tombola`, mas é comum que subclasses tenham mais
13351335
métodos.
13361336

@@ -2020,7 +2020,7 @@ Lembra((("static protocols", "supporting", id="SPsupport13"))) da classe
20202020
ponto flutuante, faz sentido suportar a conversão de `Vector2d` para `complex`.
20212021

20222022
O <<ex_vector2d_complex_v4>> mostra a implementação do método `+__complex__+`,
2023-
para melhorar a última versão de `Vector2d`, vista no <<ex_vector2d_v3_full>>.
2023+
para melhorar a última versão de `Vector2d`, vista no <<ex_vector2d_v3_full>> do <<ch_pythonic_obj>>.
20242024
Para deixar o serviço completo, podemos suportar a operação inversa, com um
20252025
método de classe `fromcomplex`, que constrói um `Vector2d` a partir de um
20262026
`complex`.
@@ -2038,7 +2038,7 @@ include::../code/13-protocol-abc/typing/vector2d_v4.py[tags=VECTOR2D_V4_COMPLEX]
20382038
implementação melhor no <<ex_vector2d_complex_v5>>.
20392039

20402040
Dado o código acima, e o método `+__abs__+` que o `Vector2d` já tinha em
2041-
<<ex_vector2d_v3_full>>, temos o seguinte:
2041+
<<ex_vector2d_v3_full>> do <<ch_pythonic_obj>>, temos o seguinte:
20422042

20432043
[source, python]
20442044
----
@@ -2179,7 +2179,7 @@ de execução sobre o item obtido.
21792179

21802180
<8> Esta linha gera uma observação no relatório do Mypy.
21812181

2182-
Como vimos no <<ex_top_protocol_test>>, `reveal_type` é uma função "mágica"
2182+
Como vimos no <<ex_top_protocol_test>> do <<ch_type_hints_def>>, `reveal_type` é uma função "mágica"
21832183
reconhecida pelo Mypy. Por isso ela não é importada e só conseguimos chamá-la
21842184
de dentro de blocos `if` protegidos por `typing.TYPE_CHECKING`, que só é `True`
21852185
aos olhos de um checador de tipos estático, mas é `False` durante a

online/cap14.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,13 @@ Herdando de `collections.UserDict` em vez de `dict`, os problemas expostos no
370370
====
371371

372372
Como um experimento, para medir o trabalho extra necessário para criar uma
373-
subclasse de um tipo embutido, reescrevi a classe `StrKeyDict` do
374-
<<ex_strkeydict>>,
373+
subclasse de um tipo embutido, reescrevi a classe `StrKeyDict`
374+
(<<ex_strkeydict>> do <<ch_dicts_sets>>),
375375
para torná-la uma subclasse de `dict` em vez de `UserDict`.
376376
Para fazê-la passar pelo mesmo banco de testes, tive que implementar
377377
`+__init__+`, `get`, e `update`, pois as versões herdadas de `dict` se recusaram
378378
a cooperar com os métodos sobrescritos `+__missing__+`, `+__contains__+` e
379-
`+__setitem__+`. A subclasse de `UserDict` no <<ex_strkeydict>>
379+
`+__setitem__+`. A subclasse de `UserDict` no <<ex_strkeydict>> do <<ch_dicts_sets>>
380380
tem 16 linhas, enquanto a subclasse experimental de `dict` acabou com 33 linhas.footnote:[Se
381381
você tiver curiosidade, o experimento está no arquivo
382382
https://fpy.li/14-7[_14-inheritance/strkeydict_dictsub.py_] do repositório
@@ -1230,7 +1230,7 @@ interferem naquele estado. Mesmo se nossos métodos cooperarem chamando `super()
12301230
e o estado interno seja protegido através da sintaxe `__x`, restarão ainda
12311231
inúmeras formas pelas quais sobrescrever um método pode introduzir bugs.
12321232

1233-
Em <<waterfowl_essay>>, Alex Martelli cita _More Effective {cpp}_, de Scott
1233+
No texto <<waterfowl_essay>> (<<goose_typing_sec>>), Alex Martelli cita _More Effective {cpp}_, de Scott
12341234
Meyer, que diz: "toda classe não-final (não-folha) deveria ser abstrata". Em
12351235
outras palavras, Meyer recomenda que subclasses deveriam ser criadas apenas a
12361236
partir de classes abstratas.

online/cap15.adoc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ implementação mais simples, produzindo strings diretamente, sem passar pelo
840840
seria necessário.]
841841

842842
Aqui está outro exemplo com `cast`, desta vez para corrigir uma dica de tipo
843-
desatualizada na biblioteca padrão de Python. No <<ex_tcp_mojifinder_main>>, criei
843+
desatualizada na biblioteca padrão de Python. No <<ex_tcp_mojifinder_main>> do <<ch_async>>, criei
844844
um objeto `asyncio.Server`, e queria obter o endereço onde o servidor está
845845
ouvindo (aceitando conexões). Escrevi esta linha de código:
846846

@@ -892,7 +892,7 @@ seguro.
892892
A leitora atenta pode ter notado que `sockets[0]` poderia gerar um `IndexError`
893893
se `sockets` estiver vazio.
894894
Entretanto, até onde entendo o `asyncio`, isso não pode acontecer no
895-
<<ex_tcp_mojifinder_main>>, pois no momento em que leio o atributo `sockets`, o
895+
<<ex_tcp_mojifinder_main>> do <<ch_async>>, pois no momento em que leio o atributo `sockets`, o
896896
`server` já está pronto para aceitar conexões , portanto o atributo não estará
897897
vazio. E, de qualquer forma, `IndexError` ocorre durante a execução. O Mypy não
898898
consegue localizar esse problema nem mesmo em um caso trivial como
@@ -1161,7 +1161,7 @@ Dada a instabilidade da situação atual, se você precisar ler anotações dura
11611161
pass:[<code>in&#x200b;spect&#x200b;.get_annotations</code>] ou `typing.get_type_hints`, e faça o restante de sua base de código chamar aquela função, de forma que mudanças futuras fiquem restritas a um único local.
11621162

11631163
Para demonstrar esse segundo ponto, aqui estão as primeiras linhas da classe `Checked`,
1164-
que estudaremos no <<ex_checked_class_top>>:
1164+
que estudaremos no <<ex_checked_class_top>> do <<ch_class_metaprog>>:
11651165

11661166
[source, python]
11671167
----
@@ -1188,7 +1188,9 @@ As seções restantes desse capítulo cobrem tipos genéricos, começando pela f
11881188
[[impl_generic_class_sec]]
11891189
=== Implementando uma classe genérica
11901190

1191-
No((("gradual type system", "implementing generic classes", id="GTSgeneric15")))((("classes", "implementing generic classes", id="CAPgeneric15")))((("generic classes, implementing", id="genclasimp15"))) <<ex_tombola_abc>>, definimos a ABC `Tombola`: uma interface para classes que funcionam como um recipiente para sorteio de bingo. A classe `LottoBlower` do <<ex_lotto>> é uma implementação concreta.
1191+
No((("gradual type system", "implementing generic classes", id="GTSgeneric15")))((("classes", "implementing generic classes", id="CAPgeneric15")))((("generic classes, implementing", id="genclasimp15")))
1192+
<<ex_tombola_abc>> do <<ch_ifaces_prot_abc>>
1193+
definimos a ABC `Tombola`: uma interface para classes que funcionam como um recipiente para sorteio de bingo. A classe `LottoBlower` (<<ex_lotto>> do <<ch_ifaces_prot_abc>>) é uma implementação concreta.
11921194
Vamos agora estudar uma versão genérica de `LottoBlower`, usada da forma que aparece no <<ex_generic_lotto_demo>>.
11931195

11941196

@@ -1665,7 +1667,7 @@ De acordo com o https://fpy.li/15-35[_typeshed_],
16651667
`+int.__abs__+` devolve um `int`, o que é _consistente-com_ o parametro de tipo `float` declarado na dica de tipo `is_unit` para o argumento `v`.
16661668

16671669
De forma similar, podemos escrever uma versão genérica do protocolo
1668-
`RandomPicker`, apresentado na <<ex_randompick_protocol>>, que foi definido com
1670+
`RandomPicker`, apresentado no <<ex_randompick_protocol>> do <<ch_ifaces_prot_abc>>, que foi definido com
16691671
um único método `pick` devolvendo `Any`.
16701672

16711673
O <<ex_generic_randompick_protocol>> mostra como criar um `RandomPicker`
@@ -1898,9 +1900,8 @@ não-documentada `TransportSocket` no módulo igualmente não documentado
18981900
incorreto, pois esse último não é subtipo do primeiro, como explicitado em uma
18991901
https://fpy.li/15-52[docstring] no código-fonte.
19001902
1901-
19021903
Caí em uma toca de coelho similar quando acrescentei dicas de tipo ao
1903-
<<ex_primes_procs_top>>, uma demonstração simples de `multiprocessing`.
1904+
<<ex_primes_procs_top>> do <<ch_concurrency_models>>, uma demonstração simples de `multiprocessing`.
19041905
Aquele exemplo usa objetos `SimpleQueue`,
19051906
obtidos invocando `multiprocessing.SimpleQueue()`.
19061907
Entretanto, não pude usar aquele nome em uma dica de tipo,

online/cap16.adoc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ https://fpy.li/16-4[_Boolean indexing_] (indexação booleana).
169169

170170
Como prometido acima, vamos implementar vários novos operadores na classe
171171
`Vector`, do <<ch_seq_methods>>. O <<ex_vector_v6_unary>> mostra o método
172-
`+__abs__+`, que já estava no <<ex_vector_v5>> (Capítulo 12),
172+
`+__abs__+`, que já estava no <<ex_vector_v5>> do <<ch_seq_methods>>,
173173
e os novos métodos `+__neg__+` e `+__pos__+` para operadores unários.
174174

175175
[[ex_vector_v6_unary]]
@@ -560,7 +560,7 @@ type(s) for +: 'Vector' and 'str'” (_tipos de operandos não suportados para +
560560
A implementação final dos métodos especiais de adição de `Vector` está no <<ex_vector_v6>>.
561561

562562
[[ex_vector_v6]]
563-
.vector_v6.py: métodos do operador `{plus}` adicionados a vector_v5.py (no <<ex_vector_v5>>)
563+
.vector_v6.py: métodos do operador `{plus}` adicionados a vector_v5.py (<<ex_vector_v5>> do <<ch_seq_methods>>)
564564
====
565565
[source, python]
566566
----
@@ -897,7 +897,7 @@ herdados da classe `object` comparam os IDs dos objetos, então não ocorre `Typ
897897
|=================================================================================================
898898

899899
Considerando estas regras, vamos revisar e aperfeiçoar o comportamento do método
900-
`+Vector.__eq__+`, escrito assim no __vector_v5.py__ (<<ex_vector_v5>>):
900+
`+Vector.__eq__+`, escrito assim no __vector_v5.py__ (<<ex_vector_v5>> do <<ch_seq_methods>>):
901901

902902
[source, python]
903903
----
@@ -1011,7 +1011,7 @@ vc)+`.
10111011

10121012
. `+Vector2d.__eq__(v2d, vc)+` transforma os dois operandos em tuplas e os
10131013
compara: o resultado é `True` (o código de `+Vector2d.__eq__+` está no
1014-
<<ex_vector2d_v3_full>>).
1014+
<<ex_vector2d_v3_full>> do <<ch_pythonic_obj>>).
10151015

10161016
Já para a comparação `va == t3`, entre `Vector` e `tuple` no <<eq_demo_new_eq>>,
10171017
os passos são:
@@ -1147,7 +1147,7 @@ exemplos.
11471147
====
11481148

11491149
Para mostrar o código de um método interno de atribuição aumentada, vamos
1150-
estender a classe `BingoCage` do <<ex_tombola_bingo>> para implementar
1150+
estender a classe `BingoCage` do <<ex_tombola_bingo>> do <<ch_ifaces_prot_abc>> para implementar
11511151
`+__add__+` e `+__iadd__+`.
11521152

11531153
Vamos chamar a subclasse de `AddableBingoCage`. Os doctests da classe
@@ -1227,8 +1227,8 @@ argumento iterável.
12271227

12281228
Agora que vimos o comportamento desejado para `AddableBingoCage`, podemos
12291229
estudar sua implementação no <<ex_addable_bingo>>. Lembre-se de que `BingoCage`,
1230-
do <<ex_tombola_bingo>>, é uma subclasse concreta da ABC `Tombola` do
1231-
<<ch_ifaces_prot_abc>>, <<ex_tombola_abc>>.
1230+
(<<ex_tombola_bingo>> do <<ch_ifaces_prot_abc>>), é uma subclasse concreta da ABC `Tombola` do
1231+
<<ex_tombola_abc>> do <<ch_ifaces_prot_abc>>.
12321232

12331233
[[ex_addable_bingo]]
12341234
.bingoaddable.py: `AddableBingoCage` é subclasse de `BingoCage` com suporte aos operadores `{plus}` e `{iadd}`

online/cap17.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ Expressões geradoras são "açúcar sintático": elas pode sempre ser substitu
729729
730730
=== Quando usar expressões geradoras
731731
732-
Eu((("generators", "when to use generator expressions")))((("generator expressions (genexps)"))) usei várias expressões geradoras quando implementamos a classe `Vector` no <<ex_vector_v5>>. Cada um destes métodos contém uma expressão geradora: `+__eq__+`, `+__hash__+`, `+__abs__+`, `angle`, `angles`, pass:[<span class="keep-together"><code>format</code></span>], `+__add__+`, e `+__mul__+`.
732+
Eu((("generators", "when to use generator expressions")))((("generator expressions (genexps)"))) usei várias expressões geradoras quando implementamos a classe `Vector` no <<ex_vector_v5>> do <<ch_seq_methods>>. Cada um destes métodos contém uma expressão geradora: `+__eq__+`, `+__hash__+`, `+__abs__+`, `angle`, `angles`, pass:[<span class="keep-together"><code>format</code></span>], `+__add__+`, e `+__mul__+`.
733733
// has a generator expression.
734734
Em todos aqueles métodos, uma compreensão de lista também funcionaria, com um custo adicional de memória para armazenar os valores da lista intermediária.
735735
@@ -743,7 +743,7 @@ Minha regra básica para escolher qual sintaxe usar é simples: se a expressão
743743
[TIP]
744744
.Dica de sintaxe
745745
====
746-
Quando uma expressão geradora é passada como único argumento a uma função ou a um construtor, não é necessário escrever um conjunto de parênteses para a chamada da função e outro par cercando a expressão geradora. Um único par é suficiente, como na chamada a `Vector` no método `+__mul__+` do <<ex_vector_v5>>, reproduzido abaixo:
746+
Quando uma expressão geradora é passada como único argumento a uma função ou a um construtor, não é necessário escrever um conjunto de parênteses para a chamada da função e outro par cercando a expressão geradora. Um único par é suficiente, como na chamada a `Vector` no método `+__mul__+` do <<ex_vector_v5>> do <<ch_seq_methods>>, reproduzido abaixo:
747747
748748
[source, python]
749749
----

online/cap22.adoc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,9 @@ Nossa próxima tarefa é reestruturar os dados para preparar a recuperação aut
253253
[[computed_props_sec]]
254254
=== Propriedades computadas
255255

256-
Vimos inicialmente o decorador `@property` no <<ch_pythonic_obj>>, na <<hashable_vector2d_sec>>. No <<ex_vector2d_v3>>, usei duas propriedades no `Vector2d` apenas para tornar os atributos `x` e `y` apenas para leitura.
256+
Vimos inicialmente o decorador `@property` na <<hashable_vector2d_sec>>.
257+
No <<ex_vector2d_v3>> do <<ch_pythonic_obj>>,
258+
usei duas propriedades no `Vector2d` apenas para tornar os atributos `x` e `y` apenas para leitura.
257259
Aqui vamos ver propriedades que calculam valores, levando a uma discussão sobre como armazenar tais valores.
258260

259261
Os((("computed properties", "properties that compute values")))((("dynamic attributes and properties", "computed properties", id="DAPcomputp22"))) registros na lista `'events'` dos dados JSON da OSCON contêm números de série inteiros apontando para registros nas listas `'speakers'` e `'venues'`.

online/cap24.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,8 @@ Metaclasses, bem((("class metaprogramming", "useful applications of metaclasses"
13231323

13241324
Em alguns casos, a metaprogramação de classes também pode ajudar em questões de desempenho, executando tarefas no momento da importação que de outra forma seriam executadas repetidamente durante a execução.
13251325

1326-
Para finalizar, vamos nos lembrar do conselho final de Alex Martelli em seu ensaio <<waterfowl_essay>>:
1326+
Para finalizar, vamos nos lembrar do conselho final de Alex Martelli em seu ensaio <<waterfowl_essay>>
1327+
(<<goose_typing_sec>>):
13271328

13281329
[quote]
13291330
____

0 commit comments

Comments
 (0)