@@ -19,25 +19,25 @@ Desde o Python 3.8, temos quatro maneiras de definir e usar interfaces.
1919Elas estão ilustradas no _Mapa de Sistemas de Tipagem_ (<<type_systems_described>>).
2020
2121[[type_systems_described]]
22- .Na metade superior, checagens de tipo dinâmicas (em tempo de execução) usando só o interpretador Python; a metade inferior requer um checador estático externo como o Mypy, ou um IDE como a PyCharm. Os quadrantes da esquerda se referem a tipagem baseada na estrutura do objeto—isto é, os métodos oferecidos pelo objeto, independente de sua classe ou superclasses; os quadrantes da direita dependem de tipos explicitamente nomeados no código: a classe do objeto, ou suas superclasses.
22+ .Na metade superior, checagens de tipo dinâmicas (em tempo de execução) usando só o interpretador Python; a metade inferior requer um checador estático externo como o Mypy, ou um IDE como o PyCharm. Os quadrantes da esquerda se referem à tipagem baseada na estrutura do objeto—isto é, os métodos oferecidos pelo objeto, independente de sua classe ou superclasses; os quadrantes da direita dependem de tipos explicitamente nomeados no código: a classe do objeto, ou suas superclasses.
2323image::../images/mapa-da-tipagem.png[align="center",pdfwidth=12cm]
2424
2525Podemos as quatro abordagens assim:
2626
2727Tipagem pato (_duck typing_)::
28- A ((("duck typing"))) tratamento padrão para tipos em Python desde o início.
28+ O ((("duck typing"))) tratamento padrão para tipos em Python desde o início.
2929 Estamos estudando tipagem pato desde o primeiro capítulo do volume 1.
3030Tipagem ganso (_goose typing_)::
3131 A((("goose typing", "definition of term"))) abordagem suportada pelas classes base abstratas
3232 (ABCs, _sigla em inglês para Abstract Base Classes_) desde Python 2.6,
3333 que depende de checar objetos contra ABCs durante a execução.
34- A tipagem ganso é um dos principais temas desse capítulo.
34+ A tipagem ganso é um dos principais temas deste capítulo.
3535Tipagem estática::
3636 A((("static typing"))) abordagem tradicional das linguagens de tipos estáticos como C e Java;
3737 suportada desde o Python 3.5 pelo módulo `typing`,
3838 e aplicada por checadores de tipos externos compatíveis com a
3939 https://fpy.li/pep484[PEP 484—Type Hints].
40- Este não é o foco desse capítulo.
40+ Este não é o foco deste capítulo.
4141 A maior parte do <<ch_type_hints_def>> e do <<ch_more_types>>
4242 mais adiante são sobre tipagem estática.
4343Tipagem pato estática (_static duck typing_)::
@@ -54,7 +54,7 @@ As((("interfaces", "typing map")))((("typing map"))) quatro abordagens retratada
5454<<type_systems_described>> são complementares: elas têm diferentes prós e contras.
5555Não faz sentido descartar qualquer uma delas.
5656
57- Cada uma dessas quatro abordagens dependem de interfaces para funcionarem , mas a
57+ Cada uma dessas quatro abordagens depende de interfaces para funcionar , mas a
5858tipagem estática pode ser implementada de forma limitada usando apenas tipos
5959concretos em vez de abstrações de interfaces como protocolos e classes base
6060abstratas.
@@ -66,14 +66,13 @@ capítulo está dividido em quatro seções principais, tratando de três dos qu
6666quadrantes no Mapa de Sistemas de Tipagem. (<<type_systems_described>>):
6767
6868* A <<two_kinds_protocols_sec>> compara duas formas de tipagem estrutural com
69- protocolos +
70- —o lado esquerdo do Mapa.
69+ protocolos—o lado esquerdo do Mapa.
7170
72- * A <<prog_ducks_sec>> se aprofunda na tipagem pato que já é familiar para
71+ * A <<prog_ducks_sec>> se aprofunda na tipagem pato, que já é familiar para
7372quem programa em Python. Vamos ver como fazê-la mais segura,
7473preservando sua melhor qualidade: a flexibilidade.
7574
76- * A <<goose_typing_sec>> explica o uso de ABCs para um checagem de tipo mais
75+ * A <<goose_typing_sec>> explica o uso de ABCs para uma checagem de tipo mais
7776estrita durante a execução do código. É a seção mais longa, não por ser a mais
7877importante, mas porque há mais seções sobre tipagem pato, tipagem pato estática e
7978tipagem estática em outras partes do livro.
@@ -100,7 +99,7 @@ conteúdo novo—e de todos os outros capítulos relacionados à tipagem em Pyth
10099* A <<two_kinds_protocols_sec>> explica as semelhanças e diferenças entre
101100protocolos dinâmicos e estáticos.
102101
103- * A <<defensive_duck_prog_sec>> praticamente reproduz o conteúdo da primeira
102+ * A <<defensive_duck_prog_sec>> reproduz praticamente o conteúdo da primeira
104103edição, mas foi atualizada e agora tem um título de seção que enfatiza sua
105104importância.
106105
@@ -112,7 +111,7 @@ para incluir a `Collection` ABC, do Python 3.6.
112111
113112Na primeira edição de _Python Fluente_ escrevi uma seção encorajando o uso das ABCs
114113do módulo `numbers` para tipagem ganso.
115- Na <<numbers_abc_proto_sec>> explico porque , atualmente, é melhor usar
114+ Na <<numbers_abc_proto_sec>> explico por que , atualmente, é melhor usar
116115protocolos numéricos estáticos do módulo `typing` como `SupportsFloat` se
117116você planeja usar checadores de tipos estáticos, ou checagem durante a execução
118117no estilo da tipagem ganso.
@@ -228,7 +227,7 @@ precise de todos eles.
228227* Protocolos estáticos podem ser inspecionados por checadores de tipos
229228estáticos, protocolos dinâmicos não.
230229
231- Os dois tipos de protocolo compartilham um característica essencial: uma classe
230+ Os dois tipos de protocolo compartilham uma característica essencial: uma classe
232231nunca precisa declarar que suporta um protocolo pelo nome, isto é, por herança.
233232
234233Antes dos protocolos estáticos, Python já oferecia outra forma de definir uma
@@ -267,7 +266,7 @@ image::../images/flpy_1302.png[align="center",pdfwidth=10cm]
267266
268267[TIP]
269268====
270- A maior parte das ABCs no módulo `collections.abc` existem para formalizar
269+ A maior parte das ABCs no módulo `collections.abc` existe para formalizar
271270interfaces que já eram implementadas por objetos nativos e implicitamente
272271suportadas pelo interpretador, muito antes daquele módulo existir.
273272As ABCs são úteis como pontos de partida para novas classes, e
@@ -312,15 +311,15 @@ especial que Python dá a qualquer estrutura vagamente semelhante a uma
312311sequência. O protocolo iterável em Python representa uma forma extrema de tipagem pato:
313312o interpretador tenta dois métodos diferentes para iterar sobre objetos.
314313
315- Para deixar mais claro, os comportamentos que que descrevi nessa seção estão
314+ Para deixar mais claro, os comportamentos que descrevi nessa seção estão
316315implementados no próprio interpretador, na maioria dos casos em C. Eles não
317316dependem dos métodos da ABC `Sequence`. Por exemplo, os métodos concretos
318317`+__iter__+` e `+__contains__+` na classe `Sequence` emulam comportamentos
319318internos do interpretador Python. Se tiver curiosidade, veja o código-fonte
320319destes métodos em https://fpy.li/13-3[_Lib/_collections_abc.py_].
321320
322321Agora vamos estudar um exemplo que demonstra por que checadores de tipos
323- estáticos não têm lidar com protocolos
322+ estáticos não têm como lidar com protocolos
324323dinâmicos.((("", startref="Pseqit13")))((("", startref="seqpro13")))((("",
325324startref="itpro13")))
326325
@@ -342,7 +341,7 @@ como módulos, classes e funções.
342341Vamos fazer _monkey patch_ na classe `FrenchDeck` do <<ex_pythonic_deck_repeat>>
343342para superar uma grande limitação: ela não pode ser embaralhada. Anos atrás,
344343quando escrevi pela primeira vez o exemplo `FrenchDeck`, implementei um método
345- `shuffle`. Depois tive um insight pythônico : se um `FrenchDeck` funciona como
344+ `shuffle`. Depois tive uma sacada pythônica : se um `FrenchDeck` funciona como
346345uma sequência, não precisa ter um método `shuffle`, pois já existe a função
347346`random.shuffle`, que "embaralha a sequência x internamente" conforme a
348347https://fpy.li/6m[documentação oficial].
@@ -385,10 +384,10 @@ TypeError: 'FrenchDeck' object does not support item assignment
385384----
386385====
387386
388- A mensagem de erro é clara: `O objeto 'FrenchDeck' não suporta a atribuição de
389- itens` . O problema é que + shuffle+ opera _internamente_ , trocando os itens de
387+ A mensagem de erro é clara: "o objeto 'FrenchDeck' não suporta a atribuição de
388+ itens" . O problema é que ` shuffle` opera internamente , trocando os itens de
390389lugar dentro da coleção, mas `FrenchDeck` só implementa o protocolo de sequência
391- _imutável_ . Para ser uma sequências mutável, `FrenchDeck` precisa oferecer um
390+ imutável . Para ser uma sequência mutável, `FrenchDeck` precisa oferecer um
392391método `+__setitem__+`.
393392
394393Como Python é dinâmico, podemos consertar isso durante a execução, até mesmo no
@@ -423,10 +422,14 @@ https://fpy.li/6n[Emulando tipos contêineres].
423422Aqui nomeei os argumentos `deck, position, card`—e não `self, key, value` como na
424423referência da linguagem—para mostrar que todo método Python começa sua vida como
425424uma função comum, e nomear o primeiro argumento `self` é só uma convenção.
426- Fujir da convenção é OK em uma sessão no console onde o código é descartável,
425+ Fugir da convenção é OK em uma sessão no console onde o código é descartável,
427426mas em um arquivo de código-fonte de Python é muito melhor usar
428427`self`, `key`, e `value`, seguindo a documentação.
429428
429+ ////
430+ PAREI
431+ ////
432+
430433O truque é que `set_card` pressupõe que o `deck` tem um atributo chamado
431434`+_cards+`, e seu valor deve ser uma sequência mutável. A função `set_cards` é
432435então anexada à classe `FrenchDeck` class como o método especial
0 commit comments