You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Exceto pela nova assinatura do construtor, me assegurei que todos os testes realizados com `Vector2d` (por exemplo, `Vector2d(3, 4)`) são bem sucedidos e produzem os mesmos resultados com um `Vector` de dois componentes, como `Vector([3, 4])`.
109
+
Exceto pela nova assinatura do construtor, verifiquei que todos os testes
110
+
realizados com `Vector2d` (por exemplo, `Vector2d(3, 4)`) passam e
111
+
produzem os mesmos resultados com um `Vector` de dois componentes,
112
+
como `Vector([3, 4])`.
110
113
111
114
[WARNING]
112
115
====
@@ -184,7 +187,7 @@ Poderíamos criar `Vector` como uma subclasse de `Vector2d`, mas
184
187
escolhi não fazer assim por duas razões. Em primeiro lugar, os construtores
185
188
são incompatíveis, o que torna relação de super/subclasse desaconselhável,
186
189
por violar o
187
-
https://pt.wikipedia.org/wiki/Princ%C3%ADpio_da_substitui%C3%A7%C3%A3o_de_Liskov[princípio de substituição de Liskov].
190
+
https://fpy.li/6c[princípio de substituição de Liskov].
188
191
Seria possível contornar isso como um tratamento engenhoso dos argumenos em
189
192
`+__init__+`, mas a segunda razão é mais importante: eu queria que `Vector` fosse
190
193
um exemplo independente de uma classe que implementa o protocolo de sequência.
@@ -206,8 +209,8 @@ No contexto da programação orientada a objetos, um protocolo é uma interface
206
209
informal, definida apenas na documentação (e não no código). Por exemplo, o
207
210
protocolo de sequência no Python implica apenas no métodos `+__len__+` e
208
211
`+__getitem__+`. Qualquer classe `Spam`, que implemente esses métodos com a
209
-
assinatura e a semântica padrões, pode ser usada em qualquer lugar onde uma
210
-
sequência for esperada. É irrelevante se `Spam` é uma subclasse dessa ou daquela
212
+
assinatura e a semântica padrão, pode ser usada em qualquer lugar onde uma
213
+
sequência é esperada. É irrelevante se `Spam` é uma subclasse dessa ou daquela
211
214
outra classe; tudo o que importa é que ela fornece os métodos necessários. Vimos
212
215
isso no <<ex_pythonic_deck>>, reproduzido aqui no <<ex_pythonic_deck_rep>>.
213
216
@@ -320,7 +323,7 @@ Vejamos agora como Python transforma a sintaxe `my_seq[1:3]` em argumentos para
320
323
[[how_slicing_works_sec]]
321
324
==== Como funciona o fatiamento
322
325
323
-
Uma demonstração vale mais que mil palavras, então veja o <<ex_slice0>>.
326
+
Uma demonstração vale mais que mil palavras, então veja o <<ex_slice0>>.
324
327
325
328
[[ex_slice0]]
326
329
.Examinando o comportamento de `+__getitem__+` e fatias
@@ -443,7 +446,7 @@ porque não faz sentido tentar usar um `float` como índice de um array.
443
446
====
444
447
O uso excessivo de `isinstance` pode ser um sinal de design orientado a objetos ruim, mas tratar fatias em `+__getitem__+` é um caso de uso justificável.
445
448
Na primeira edição, também usei um teste `isinstance` com `key`, para verificar se esse argumento era um inteiro.
446
-
O uso de `operator.index` evita esse teste, e gera um pass:[<code>Type​Error</code>] com uma mensagem muito informativa, se não for possível obter o `index` a partir de `key`.
449
+
O uso de `operator.index` evita esse teste, e gera um `TypeError` com uma mensagem muito informativa, se não for possível obter o `index` a partir de `key`.
447
450
Observe a última mensagem de erro no <<ex_vector_v2_demo>>, abaixo.
448
451
====
449
452
@@ -576,8 +579,8 @@ Após pensar um pouco sobre essa questão, veja a seguir a explicação para o q
576
579
A inconsistência no <<ex_vector_v3_getattr_bug>> ocorre devido à forma como
577
580
`+__getattr__+` funciona: Python só chama esse método como último recurso,
578
581
quando o objeto não contém o atributo nomeado.
579
-
Entretanto, após atribuirmos `v.x
580
-
= 10`, o objeto `v` agora contém um atributo `x`, e então `+__getattr__+` não
582
+
Entretanto, após atribuirmos `v.x = 10`, o objeto `v` agora contém
583
+
um atributo `x`, e então `+__getattr__+` não
581
584
será mais invocado para obter `v.x`: o interpretador vai apenas devolver o valor
582
585
`10`, que agora está vinculado a `v.x`.
583
586
Por outro lado, nossa implementação de
@@ -908,7 +911,7 @@ Assim que uma comparação é `False`, `all` devolve `False`. O <<ex_eq_all>> mo
908
911
====
909
912
910
913
Observe que primeiro comparamos o `len()` dos operandos porque
911
-
não queremos comparar item a item se os vetores tem tamanhos diferentes.
914
+
não queremos comparar item a item se os vetores têm tamanhos diferentes.
912
915
913
916
O <<ex_eq_all>> é a implementação que escolhemos para `+__eq__+` em
Copy file name to clipboardExpand all lines: online/cap13.adoc
+6-10Lines changed: 6 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,16 +3,12 @@
3
3
:example-number: 0
4
4
:figure-number: 0
5
5
6
-
++++
7
-
<blockquote>
8
-
<p>Programe mirando uma interface, não uma implementação.</p>
9
-
<p data-type="attribution">Gamma, Helm, Johnson, Vlissides, First Principle of Object-Oriented Design<span data-type="footnote"><em> Design Patterns: Elements of Reusable Object-Oriented Software</em>, "Introduction," p. 18.</span></p>
10
-
</blockquote>
11
-
++++
12
-
// [quote, Gamma, Helm, Johnson, Vlissides, First Principle of Object-Oriented Design]
13
-
// ____
14
-
// Program to an interface, not an implementation.footnote:[Design Patterns: Elements of Reusable Object-Oriented Software, Introduction, p. 18.]
15
-
// ____
6
+
[quote, Gamma, Helm, Johnson, Vlissides, First Principle of Object-Oriented Design]
7
+
____
8
+
Programe mirando uma interface,
9
+
não uma implementação.footnote:[Design Patterns:
10
+
Elements of Reusable Object-Oriented Software, Introduction, p. 18.]
11
+
____
16
12
17
13
A programação orientada a objetos((("interfaces", "role in object-oriented programming")))
0 commit comments