Skip to content

Commit 4666d16

Browse files
committed
cap13: urls curtas
1 parent a107d8a commit 4666d16

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

online/cap13.adoc

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ também para permitir iteração e o operador `in`. O método especial
173173
`+__getitem__+` é de fato o ponto central do protocolo de sequência.
174174

175175
Veja a seção
176-
https://docs.python.org/pt-br/3/c-api/sequence.html[Protocolo de Sequência]
176+
https://fpy.li/6k[Protocolo de Sequência]
177177
do Manual de referência da API Python/C:
178178

179179
`int PySequence_Check(PyObject *o)`::
@@ -209,14 +209,13 @@ Protocolo dinâmico::
209209
Os((("dynamic protocols"))) protocolos informais que Python sempre teve.
210210
Protocolos dinâmicos são implícitos, definidos por convenção e descritos na
211211
documentação. Os protocolos dinâmicos mais importantes de Python são mantidos
212-
pelo próprio interpretador, e documentados no
213-
https://docs.python.org/pt-br/3/reference/datamodel.html[capítulo "Modelo de
214-
Dados" ] em _A Referência da Linguagem Python_.
212+
pelo próprio interpretador, e documentados no capítulo
213+
https://fpy.li/2j[Modelo de Dados] em _A Referência da Linguagem Python_.
215214

216215
Protocolo estático::
217216
Um((("static protocols", "definition of"))) protocolo como definido pela
218-
https://fpy.li/pep544[PEP 544—Protocols: Structural subtyping (static duck
219-
typing)], a partir de Python 3.8. Um protocolo estático tem um definição
217+
https://fpy.li/pep544[PEP 544—Protocols: Structural subtyping (static duck typing)],
218+
a partir de Python 3.8. Um protocolo estático tem um definição
220219
explícita: uma subclasse de `typing.Protocol`.
221220

222221
Há duas diferenças fundamentais entre eles:
@@ -353,7 +352,7 @@ essencial: ela não pode ser embaralhada. Anos atrás, quando escrevi pela
353352
primeira vez o exemplo `FrenchDeck`, implementei um método `shuffle`. Depois
354353
tive um insight pythônico: se um `FrenchDeck` age como uma sequência, então ele
355354
não precisa de seu próprio método `shuffle`, pois já existe um `random.shuffle`,
356-
https://docs.python.org/pt-br/3/library/random.html#random.shuffle[documentado]
355+
https://fpy.li/6m[documentado]
357356
como "Embaralha a sequência x internamente."
358357

359358
A função `random.shuffle` padrão é usada assim:
@@ -426,10 +425,10 @@ suit='clubs'), Card(rank='7', suit='hearts'), Card(rank='9', suit='spades')]
426425
<3> `deck` agora pode ser embaralhado, pois acrescentei o método necessário do
427426
protocolo de sequência mutável.
428427

429-
A assinatura do método especial `+__setitem__+` está definida na _A Referência
430-
da Linguagem Python_ em
431-
https://docs.python.org/pt-br/3/reference/datamodel.html#emulating-container-types["3.3.6.
432-
Emulando de tipos contêineres"]. Aqui nomeei os argumentos `deck, position,
428+
A assinatura do método especial `+__setitem__+` está definida na
429+
_Referência da Linguagem Python_ em
430+
https://fpy.li/6n[Emulando tipos contêineres].
431+
Aqui nomeei os argumentos `deck, position,
433432
card`&#x2014;e não `self, key, value` como na referência da linguagem—para
434433
mostrar que todo método Python começa sua vida como uma função comum, e
435434
nomear o primeiro argumento `self` é só uma convenção. Isso
@@ -611,7 +610,7 @@ durante a execução—também suportado por checadores de tipos estáticos.
611610

612611

613612
O verbete
614-
https://docs.python.org/pt-br/3/glossary.html#term-abstract-base-class[classe base abstrata]
613+
https://fpy.li/6p[classe base abstrata]
615614
no Glossário da Documentação de Python tem uma boa explicação do
616615
valor dessas estruturas para linguagens que usam duck typing:
617616

@@ -901,7 +900,7 @@ Por outro lado, mesmo quando `isinstance(obj, Iterable)` retorna `False`,
901900
o Python ainda pode ser capaz de iterar sobre `obj` usando `+__getitem__+` com índices baseados em 0,
902901
como vimos em <<ch_data_model>> e na <<python_digs_seq_sec>>.
903902
A documentação de
904-
https://docs.python.org/pt-br/3/library/collections.abc.html#collections.abc.Iterable[`collections.abc.Iterable`]
903+
https://fpy.li/6q[`collections.abc.Iterable`]
905904
afirma:
906905
907906
[quote]
@@ -990,7 +989,7 @@ Mas mesmo que tenha, as subclasses ainda são obrigadas a sobrescrevê-lo,
990989
mas poderão invocar o método abstrato com `super()`,
991990
acrescentando funcionalidade em vez de implementar do zero.
992991
Veja os detalhes do uso de `@abstractmethod` na
993-
https://docs.python.org/pt-br/3/library/abc.html[documentação do módulo `abc`].
992+
https://fpy.li/6r[documentação do módulo `abc`].
994993
====
995994

996995
O código do o método `.inspect()` é simplório, mas mostra que podemos confiar em
@@ -1108,7 +1107,7 @@ A ordem dos decoradores de função empilhados importa, e no caso de `@abstractm
11081107
[quote]
11091108
____
11101109
Quando `@abstractmethod` é aplicado em combinação com outros descritores de método,
1111-
ele deve ser aplicado como o decorador mais interno...footnote:[O verbete https://docs.python.org/pt-br/dev/library/abc.html#abc.abstractmethod[`@abc.abstractmethod`] na https://docs.python.org/pt-br/dev/library/abc.html[documentação do módulo `abc`].]
1110+
ele deve ser aplicado como o decorador mais interno...footnote:[O verbete https://fpy.li/6s[`@abc.abstractmethod`] na https://docs.python.org/pt-br/dev/library/abc.html[documentação do módulo `abc`].]
11121111
____
11131112
11141113
Em outras palavras, nenhum outro decorador pode aparecer entre `@abstractmethod` e a instrução `def`.
@@ -1134,7 +1133,7 @@ include::../code/13-protocol-abc/bingo.py[tags=TOMBOLA_BINGO]
11341133
====
11351134
<1> Essa classe `BingoCage` estende `Tombola` explicitamente.
11361135
<2> Finja que vamos usar isso para um jogo online. `random.SystemRandom` implementa
1137-
a API `random` sobre a função `os.urandom(…)`, que fornece bytes aleatórios "adequados para uso em criptografia", segundo https://docs.python.org/pt-br/3/library/os.html#os.urandom[a documentação do módulo `os`].
1136+
a API `random` sobre a função `os.urandom(…)`, que fornece bytes aleatórios "adequados para uso em criptografia", segundo https://fpy.li/6t[a documentação do módulo `os`].
11381137
<3> Delega o carregamento inicial para o método `.load()`
11391138
<4> Em vez da função `random.shuffle()` normal, usamos o método `.shuffle()` de nossa instância de `SystemRandom`.
11401139
<5> `pick` é implementado como em <<ex_bingo_callable>>.
@@ -1223,7 +1222,7 @@ include::../code/13-protocol-abc/tombolist.py[]
12231222
<3> `TomboList` herda seu comportamento booleano de `list`, e isso retorna `True` se a lista não estiver vazia.
12241223
<4> Nosso `pick` chama `self.pop`, herdado de `list`, passando um índice aleatório para um item.
12251224
<5> `TomboList.load` é o mesmo que `list.extend`.
1226-
<6> `loaded` delega para `bool`.footnote:[O truque usado com `load()` não funciona com `loaded()`, pois o tipo `list` não implementa `+__bool__+`, o método que eu teria de vincular a `loaded`. O `bool()` nativo não precisa de `+__bool__+` para funcionar, porque pode também usar `+__len__+`. Veja https://docs.python.org/pt-br/3/library/stdtypes.html#truth["4.1. Teste do Valor Verdade"] no capítulo "Tipos Embutidos" da documentação de Python.]
1225+
<6> `loaded` delega para `bool`.footnote:[O truque usado com `load()` não funciona com `loaded()`, pois o tipo `list` não implementa `+__bool__+`, o método que eu teria de vincular a `loaded`. O `bool()` nativo não precisa de `+__bool__+` para funcionar, porque pode também usar `+__len__+`. Veja https://fpy.li/2g["4.1. Teste do Valor Verdade"] no capítulo "Tipos Embutidos" da documentação de Python.]
12271226
<7> É sempre possível chamar `register` dessa forma, e é útil fazer assim quando você precisa registrar uma classe que você não mantém, mas que implementa a interface.
12281227

12291228
Note que, por causa do registro,
@@ -1847,7 +1846,7 @@ Isso torna mais fácil criar novos tipos para chamar aquela função,
18471846
bom para a extensibilidade e para testes com simulações ou protótipos.
18481847

18491848
Ambas as práticas, protocolos estreitos e protocolos em código cliente, evitam um acoplamento muito firme, em acordo com o
1850-
https://pt.wikipedia.org/wiki/Princ%C3%ADpio_da_segrega%C3%A7%C3%A3o_de_interface[Princípio da Segregação de Interface],
1849+
https://fpy.li/6v[Princípio da Segregação de Interface],
18511850
que podemos resumir como "Clientes não devem ser forçados a depender de interfaces que não usam."
18521851

18531852
A página https://fpy.li/13-35["Contributing to typeshed"] (EN)

0 commit comments

Comments
 (0)