Skip to content

Commit 51764c3

Browse files
committed
xrefs wip
1 parent ffc7997 commit 51764c3

25 files changed

+74
-65
lines changed

online/Prefacio.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ Acredito que isso é mais fácil de tolerar agora que você sabe porque escolhi
9494
Aqui estão os principais tópicos de cada parte do livro:
9595

9696
<<data_structures_part>>::
97-
O <<ch_data_model>> introduz o Modelo de Dados de Python e explica porque os métodos especiais (por exemplo, `+__repr__+`) são a chave do comportamento consistente de objetos de todos os tipos. Os métodos especiais são tratados em maiores detalhes ao longo do livro. Os((("data structures"))) capítulos restantes dessa parte cobrem o uso de tipos coleção: sequências, mapeamentos e conjuntos, bem como a separação de `str` e `bytes`--causa de muitas celebrações entre usuários de Python 3, e de muita dor para usuários de Python 2 obrigados a migrar suas bases de código. Também são abordadas as fábricas de classe de alto nível na biblioteca padrão: fábricas de tuplas nomeadas e o decorador `@dataclass`. _Pattern matching_ ("casamento de padrões")—novidade no Python 3.10—é tratada em seções do <<ch_sequences>>,
97+
O <<ch_data_model>> introduz o Modelo de Dados de Python e explica porque os métodos especiais (por exemplo, `+__repr__+`) são a chave do comportamento consistente de objetos de todos os tipos. Os métodos especiais são tratados em mais detalhes ao longo do livro. Os((("data structures"))) capítulos restantes dessa parte cobrem o uso de tipos coleção: sequências, mapeamentos e conjuntos, bem como a separação de `str` e `bytes`--causa de muitas celebrações entre usuários de Python 3, e de muita dor para usuários de Python 2 obrigados a migrar suas bases de código. Também são abordadas as fábricas de classe de alto nível na biblioteca padrão: fábricas de tuplas nomeadas e o decorador `@dataclass`. _Pattern matching_ ("casamento de padrões")—novidade no Python 3.10—é tratada em seções do <<ch_sequences>>,
9898
do <<ch_dicts_sets>> e
9999
do <<ch_dataclass>>,
100100
que discutem padrões para sequências, padrões para mapeamentos e padrões para instâncias de classes.

online/cap01.adoc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,6 @@ Geralmente, se você precisa invocar um método especial,
365365
é melhor chamar a função embutida relacionada (por exemplo, `len`, `iter`, `str`, etc.).
366366
Essas funções chamam o método especial correspondente,
367367
mas também fornecem outros serviços e—para tipos embutidos—são mais rápidas que chamadas a métodos.
368-
Veja, por exemplo, <<iter_closer_look_sec>> no <<ch_generators>>.
369368

370369
Na próxima seção veremos alguns dos usos mais importantes dos métodos especiais:
371370

online/cap02.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ sequências, contrastando contêineres e sequências planas.
5555

5656
* Ressalvas sobre tuplas com elementos mutáveis, e como detectá-los se necessário.
5757

58-
Movi a discussão sobre tuplas nomeadas para a <<classic_named_tuples_sec>> no <<ch_dataclass>>,
58+
Movi a discussão sobre tuplas nomeadas para a <<classic_named_tuples_sec>> (<<ch_dataclass>>),
5959
onde elas são comparadas com `typing.NamedTuple` e `@dataclass`.
6060

6161
[NOTE]
@@ -365,7 +365,7 @@ estivessem aninhados na mesma ordem que eles aparecem na listcomp.
365365
quebrar a listcomp em duas linhas torna mais fácil ver como o resultado será ordenado.
366366

367367

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

online/cap03.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1370,7 +1370,7 @@ então Python pode mover e redimensionar a tabela conforme ela cresce.
13701370
Quando isso acontece, os elementos são reinseridos e sua ordem relativa pode mudar.
13711371

13721372
Veja o post https://fpy.li/hashint["Internals of sets and dicts"] (EN)
1373-
no _http://fluentpython.com_ para maiores detalhes.
1373+
no _http://fluentpython.com_ para mais detalhes.
13741374

13751375
Agora vamos revisar a vasta seleção de operações oferecidas pelos conjuntos.
13761376

online/cap05.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Entretanto, `TypedDict` não cria classes concretas que possam ser instanciadas.
3939
Ela é apenas a sintaxe para escrever dicas de tipo para parâmetros de função e
4040
variáveis que aceitarão valores de mapeamentos como registros,
4141
enquanto suas chaves serão os nomes dos campos.
42-
Veremos mais sobre isso na <<typeddict_sec>> do <<ch_more_types>>.
42+
Veremos mais sobre isso na <<typeddict_sec>> (<<ch_more_types>>).
4343
====
4444

4545

@@ -430,7 +430,7 @@ Pule a próxima caixinha se você não estiver interessada em gambiarras.
430430
.Remendando uma tupla nomeada para injetar um método
431431
****
432432
433-
Lembre como criamos a classe `Card` class no <<ex_pythonic_deck>> do <<ch_data_model>>:
433+
Lembre como criamos a classe `Card` class no <<ex_pythonic_deck>> (<<ch_data_model>>):
434434
435435
[source, py3]
436436
----
@@ -934,7 +934,7 @@ Valores default mutáveis são a fonte mais comum de bugs entre desenvolvedores
934934
Em definições de função, um valor default mutável é facilmente corrompido,
935935
quando uma invocação da função modifica o default,
936936
mudando o comportamento nas invocações posteriores—um tópico que
937-
vamos explorar na <<mutable_default_parameter_sec>> (no <<ch_refs_mut_mem>>).
937+
vamos explorar na <<mutable_default_parameter_sec>> (<<ch_refs_mut_mem>>).
938938
Atributos de classe são frequentemente usados como valores default de atributos para instâncias,
939939
inclusive em classes de dados.
940940
E o `@dataclass` usa os valores default nas dicas de tipo para gerar parâmetros com defaults no

online/cap08.adoc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ Isso é mais flexível que a _tipagem nominal_,
509509
ao preço de permitir mais erros durante a execução.footnote:[Duck typing é uma forma implícita de
510510
_tipagem estrutural_, que as anotações de tipo passaram a suportar explicitamente após a versão 3.8,
511511
com a introdução de `typing.Protocol`.
512-
Vamos falar disso mais adiante nesse capítulo, em <<protocols_in_fn>>, e com mais detalhes no <<ch_ifaces_prot_abc>>.]
512+
Vamos falar disso mais adiante nesse capítulo, em <<protocols_in_fn_sec>>, e com mais detalhes no <<ch_ifaces_prot_abc>>.]
513513

514514

515515
Tipagem nominal::
@@ -697,7 +697,7 @@ Nessa seção exploramos as relações de tipos e operações no duck typing e n
697697
começando com a função simples `double()` — que deixamos sem dicas de tipo.
698698
Agora vamos dar uma olhada nos tipos mais importantes ao anotar funções.
699699

700-
Vamos ver um bom modo de adicionar dicas de tipo a `double()` quando examinarmos <<protocols_in_fn>>.
700+
Vamos ver um bom modo de adicionar dicas de tipo a `double()` quando examinarmos <<protocols_in_fn_sec>>.
701701
Mas antes disso, há tipos mais importantes para conhecer.((("", startref="FTHsupport08")))((("", startref="THsup08")))
702702

703703

@@ -1429,7 +1429,7 @@ Na prática, se você quiser anotar argumentos numéricos para checagem estátic
14291429
. Declarar um tipo union como `Union[float, Decimal, Fraction]`.
14301430
. Se você quiser evitar a codificação explícita de tipos concretos, usar protocolos numéricos como `SupportsFloat`, tratados na <<runtime_checkable_proto_sec>>.
14311431

1432-
A <<protocols_in_fn>> abaixo é um pré-requisito para entender protocolos numéricos.
1432+
A <<protocols_in_fn_sec>> abaixo é um pré-requisito para entender protocolos numéricos.
14331433

14341434
Antes disso, vamos examinar uma ABC muito útil em dicas de tipo: `Iterable`.((("", startref="GTSabstract08")))((("", startref="ABChint08")))
14351435

@@ -1743,7 +1743,7 @@ Agora vamos ver `typing.Protocol`, um novo recurso de Python 3.8,
17431743
que permite um uso mais pythônico de dicas de
17441744
tipo.((("", startref="GTSparam08")))((("", startref="GCtypvar08")))((("", startref="typevar08")))
17451745

1746-
[[protocols_in_fn]]
1746+
[[protocols_in_fn_sec]]
17471747
==== Protocolos estáticos
17481748

17491749
[NOTE]
@@ -2064,7 +2064,7 @@ Apesar de `int` ser _subtipo-de_ `float`, no `Callable` parametrizado a relaçã
20642064
`Callable[[float], None]` é _subtipo-de_ `Callable[[int], None]`.
20652065
Assim dizemos que aquele `Callable` é _contravariante_ a respeito dos tipos de parâmetros declarados.
20662066

2067-
A <<variance_sec>> no <<ch_more_types>> explica variância em mais detalhes e
2067+
A <<variance_sec>> (<<ch_more_types>>) explica variância em mais detalhes e
20682068
com exemplos de tipos invariantes, covariantes e contravariantes.
20692069

20702070
[TIP]

online/cap09.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ Decoradores parecidos são usados por muitos frameworks Python para adicionar fu
192192
um registro mapeando padrões de URLs para funções que geram respostas HTTP.
193193
Tais decoradores de registro podem ou não modificar as funções decoradas.
194194

195-
Vamos ver um decorador de registro em ação na <<decorated_strategy>> (do <<ch_design_patterns>>).
195+
Vamos ver um decorador de registro em ação na <<decorated_strategy>> (<<ch_design_patterns>>).
196196

197197
A maioria dos decoradores modificam a função decorada.
198198
Eles normalmente fazem isso definindo e devolvendo uma função interna para substituir a função decorada.

online/cap11.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ Se o código for parte de uma biblioteca para uso por outros programadores, ent
842842
Por exemplo, `+__eq__+` pode não ser necessário para suportar um requisito do negócio, mas torna a classe mais fácil de testar.
843843

844844
Minha meta, ao expandir o código do `Vector2d`, foi criar um contexto para a discussão dos métodos especiais e das convenções de programação em Python.
845-
Os exemplos neste capítulo demonstraram vários dos métodos especiais vistos antes na <<special_names_tbl>> (do <<ch_data_model>>):
845+
Os exemplos neste capítulo demonstraram vários dos métodos especiais vistos antes na <<special_names_tbl>> (<<ch_data_model>>):
846846

847847
* Métodos de representação de strings e bytes: `+__repr__+`, `+__str__+`, `+__format__+` e `+__bytes__+`
848848
* Métodos para reduzir um objeto a um número: `+__abs__+`, `+__bool__+` e `+__hash__+`

online/cap12.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ Como protocolos são informais e não obrigatórios, muitas vezes é possível r
135135
====
136136
Com a https://fpy.li/pep544[PEP 544—Protocols: Structural subtyping (static duck typing) (_Protocolos:sub-tipagem estrutural (duck typing estático)_)] (EN),
137137
o Python((("protocol classes")))((("protocols", "static protocols"))) 3.8 suporta _classes protocolo_: subclasses de `typing.Protocol`,
138-
que estudamos na <<protocols_in_fn>>.
138+
que estudamos na <<protocols_in_fn_sec>>.
139139
Esse novo uso da palavra protocolo no Python tem um significado relacionado, mas diferente. Quando preciso diferenciá-los, escrevo((("static protocols", "versus dynamic protocols", secondary-sortas="dynamic protocols"))) _protocolo estático_ para me referir aos protocolos formalizados em classes protocolo (subclasses de `typing.Protocol`), e((("dynamic protocols"))) _protocolos dinâmicos_ para o sentido tradicional.
140140
Uma diferença fundamental é que implementações de um protocolo estático precisam oferecer todos os métodos definidos na classe protocolo.
141-
A <<two_kinds_protocols_sec>> no <<ch_ifaces_prot_abc>> traz maiores detalhes.
141+
A <<two_kinds_protocols_sec>> (<<ch_ifaces_prot_abc>>) traz mais detalhes.
142142
====
143143

144144
////

online/cap13.adoc

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
A programação orientada a objetos((("interfaces", "role in object-oriented programming")))
1616
tem tudo a ver com interfaces.
1717
A melhor abordagem para entender um tipo em Python é conhecer os métodos que
18-
aquele tipo oferece—sua interface—como discutimos na
19-
<<types_defined_by_ops_sec>> do (<<ch_type_hints_def>>).
18+
aquele tipo oferece—sua interface—como vimos na
19+
<<types_defined_by_ops_sec>> (<<ch_type_hints_def>>).
2020

2121
Dependendo ((("interfaces", "ways of defining and using"))) da linguagem de programação,
2222
temos uma ou mais maneiras de definir e usar interfaces.
@@ -44,7 +44,7 @@ Duck typing estática::
4444
Uma((("static duck typing"))) abordagem popularizada pela linguagem Go;
4545
suportada por subclasses de `typing.Protocol`—lançada no Python 3.8 e
4646
também aplicada com o suporte de checadores de tipos externos.
47-
Tratamos desse tema pela primeira vez em <<protocols_in_fn>> (<<ch_type_hints_def>>),
47+
Tratamos desse tema pela primeira vez em <<protocols_in_fn_sec>> (<<ch_type_hints_def>>),
4848
e continuamos nesse capítulo.
4949

5050

@@ -78,7 +78,7 @@ Este((("interfaces", "significant changes to")))((("protocols", "significant cha
7878
* A introdução do capítulo e o Mapa de Sistemas de Tipagem (<<type_systems_described>>) são novos. Essa é a chave da maior parte do conteúdo novo - e de todos os outros capítulos relacionados à tipagem em Python ≥ 3.8.
7979
* <<two_kinds_protocols_sec>> explica as semelhanças e diferenças entre protocolos dinâmicos e estáticos.
8080
* <<defensive_duck_prog_sec>> praticamente reproduz o conteúdo da primeira edição, mas foi atualizada e agora tem um título de seção que enfatiza sua importância.
81-
* <<static_protocols_sec>> é toda nova. Ela se apoia na apresentação inicial em <<protocols_in_fn>> (<<ch_type_hints_def>>).
81+
* <<static_protocols_sec>> é toda nova. Ela se apoia na apresentação inicial em <<protocols_in_fn_sec>> (<<ch_type_hints_def>>).
8282
* Os diagramas de classe de `collections.abc` nas Figuras pass:[<a href="#sequence_uml_repeat" data-type="xref" data-xrefstyle="select:labelnumber">#sequence_uml_repeat</a>], pass:[<a href="#mutablesequence_uml" data-type="xref" data-xrefstyle="select:labelnumber">#mutablesequence_uml</a>], and pass:[<a href="#collections_uml" data-type="xref" data-xrefstyle="select:labelnumber">#collections_uml</a>] foram atualizados para incluir a `Collection` ABC, de Python 3.6.
8383

8484
A primeira edição de _Python Fluente_ tinha uma seção encorajando o uso das ABCs `numbers` para goose typing.
@@ -145,7 +145,7 @@ Também é assim que protocolos são entendidos em Smalltalk, o primeiro ambient
145145
Exceto em páginas sobre programação de redes, a maioria dos usos da palavra "protocolo" na documentação de Python se refere a essas interfaces informais.
146146

147147
Agora, com a adoção da https://fpy.li/pep544[PEP 544—Protocols: Structural subtyping (static duck typing)] (EN) no Python 3.8, a palavra "protocolo" ganhou um novo sentido em Python - um sentido próximo, mas diferente.
148-
Como vimos na <<protocols_in_fn>> (<<ch_type_hints_def>>), a PEP 544 nos permite criar subclasses de `typing.Protocol` para definir um ou mais métodos que uma classe deve implementar (ou herdar) para satisfazer um verificador de tipo estático.
148+
Como vimos na <<protocols_in_fn_sec>> (<<ch_type_hints_def>>), a PEP 544 nos permite criar subclasses de `typing.Protocol` para definir um ou mais métodos que uma classe deve implementar (ou herdar) para satisfazer um verificador de tipo estático.
149149

150150
Quando precisar ser específico, vou adotar os seguintes termos:
151151

@@ -946,7 +946,11 @@ em `+__init__+`, `self._balls` armazena `list(iterable)`, e não apenas uma refe
946946
Como mencionado na <<defensive_duck_prog_sec>>, isso torna nossa `LottoBlower` flexível, pois o argumento `iterable` pode ser de qualquer tipo iterável.
947947
Ao mesmo tempo, garantimos que os itens serão armazenados em uma `list`, da onde podemos `pop` os itens.
948948
E mesmo se nós sempre recebêssemos listas no argumento `iterable`,
949-
`list(iterable)` produz uma cópia do argumento, o que é uma boa prática, considerando que vamos remover itens dali, e o cliente pode não estar esperando que a lista passada seja modificada.footnote:[<<defensive_argument>> em <<ch_refs_mut_mem>> foi dedicado à questão de apelidamento que acabamos de evitar aqui.]
949+
`list(iterable)` produz uma cópia do argumento, o que é uma boa prática,
950+
considerando que vamos remover itens dali,
951+
e o cliente pode não estar esperando que a lista passada seja
952+
modificada.footnote:[<<defensive_argument>> (<<ch_refs_mut_mem>>)
953+
trata da questão de apelidamento que acabamos de evitar aqui.]
950954

951955
Chegamos agora à característica dinâmica crucial da goose typing:
952956
declarar subclasses virtuais com o método `register`((("", startref="GTsubclass13")))((("", startref="ABCsubclass13")))((("", startref="IASsubclass13")))
@@ -1148,7 +1152,7 @@ Claro, o seu `+__subclasshook__+` poderia também verificar assinaturas de méto
11481152
[NOTE]
11491153
====
11501154
Vimos algo sobre protocolos estáticos((("protocols", "static protocols", id="Pstatic13")))
1151-
em <<protocols_in_fn>> (<<ch_type_hints_def>>).
1155+
em <<protocols_in_fn_sec>> (<<ch_type_hints_def>>).
11521156
Até considerei deixar toda a discussão sobre protocolos para esse capítulo,
11531157
mas decidi que a apresentação inicial de dicas de tipo em funções precisava incluir protocolos, pois o duck typing é uma parte essencial de Python,
11541158
e checagem de tipos estática sem protocolos não consegue lidar muito bem com as APIs pythônicas.
@@ -1799,7 +1803,7 @@ que então implementamos da forma tradicional, criando subclasses, e por regist
17991803
Finalizamos aquela seção vendo como o método especial `+__subclasshook__+` permite às ABCs suportarem a tipagem estrutural, pelo reconhecimento de classes não-relacionadas, mas que fornecem os métodos que preenchem os requisitos da interface definida na ABC.
18001804

18011805
A última grande seção foi a <<static_protocols_sec>>,
1802-
onde retomamos o estudo do duck typing estático, que havia começado no <<ch_type_hints_def>>, em <<protocols_in_fn>>.
1806+
onde retomamos o estudo do duck typing estático, que havia começado no <<ch_type_hints_def>>, em <<protocols_in_fn_sec>>.
18031807
Vimos como o decorador `@runtime_checkable` também aproveita o `+__subclasshook__+` para suportar tipagem estrutural durante a execução - mesmo que o melhor uso dos protocolos estáticos seja com checadores de tipos estáticos,
18041808
que podem levar em consideração as dicas de tipo, tornando a tipagem estrutural mais confiável.
18051809
Então falamos sobre o projeto e a codificação de um protocolo estático e como estendê-lo.
@@ -1864,8 +1868,9 @@ Ele também esta disponível na web, no excelente site do Doug https://fpy.li/13
18641868
Hellmann também usa a declaração de ABC no estilo antigo:`PluginBase(metaclass=abc.ABCMeta)` em vez do mais simples `PluginBase(abc.ABC)`, disponível desde Python 3.4.
18651869

18661870
Quando usamos ABCs, herança múltipla não é apenas comum mas praticamente inevitável,
1867-
porque cada uma das ABCs fundamentais de coleções — `Sequence`, `Mapping`, e `Set`&#x2014; estendem `Collection`, que por sua vez estende múltiplas ABCs
1868-
(veja <<collections_uml>>). Assim, <<ch_inheritance>> é um tópico importante complementar a esse.
1871+
porque cada uma das ABCs fundamentais de coleções (`Sequence`, `Mapping`, `Set`)
1872+
estendem `Collection`, que por sua vez estende múltiplas ABCs
1873+
(veja <<collections_uml>>). Assim, o <<ch_inheritance>> é um complemento importante ao presente capítulo.
18691874

18701875
A https://fpy.li/13-52[PEP 3119--Introducing Abstract Base Classes] (EN)
18711876
apresenta a justificativa para as ABCs. A https://fpy.li/13-53[PEP 3141--A Type Hierarchy for Numbers] (EN)

0 commit comments

Comments
 (0)