4
respostas

Dúvida quanto a orientação a objetos

Sendo:

x = 10; <class "int">

y = "hello"; <class "str">

x + y => TypeError (eu sei que entre instâncias diferentes o python não permite realizar operações de adição)

Minha dúvida é com relação a questão abaixo:

Por quê?

x*y => "hello...hello" (repete 10 vezes)

4 respostas

Porque se eu te disser quanto é 4 mais B você ou vai me perguntar quanto vale B ou vai me xingar. Mas se eu te dizer quanto é 4 vezes (o) B você vai me responder "Quatro vezes o 'B' é BBBB".

O python é igual, se eu te peço pra dividir, somar ou subtrair, etc, uma letra a um numero você não consegue fazer a não ser que esse numero seja uma variavel e você atribua um valor a ela ou descubra este a partir de uma formula qualquer.

Já repetir algo uma quantidade X de vezes você pode fazer com qualquer coisa, então:

print(10 * "a")
>>> aaaaaaaaaa

Cara, isso que você falou, eu já havia pensado, é tem várias coisas que vão de encontro à sua tese.

Tentei deixar minha pergunta explícita da melhor forma possível, o que eu perguntei foi referente a questão da "CLASS", ou seja, orientação a objeto.

E isso que você colocou pode ser derrubado:

x = "10" y = "a"

Python some "10" com "a"

output: 10a

O que você disse também não se encaixa aqui:

Divide "a" por 10:

a = "a"; divide = a/10 = a(1/10) = a0.1

Em programação a lógica que utilizamos é diferente do mundo físico:

O fato de ser 10 vezes essa string, não quer dizer que multiplicou 10 vezes essa string, mas que ocorreu a iteração da somatória dessa string dez vezes.

Não tem lógica você ter 1/10 de uma letra amigo, uma barra de chocolate vc consegue dividir, mas se eu te peço pra dividir a letra "A" em 10 pedaços cada pessoa vai dividir da sua própria maneira por ser algo disforme.

Como você mesmo disse o programação é lógica, a não ser que você especifique a maneira de se dividir algo esse algo não pode ser dividido.

Os próprios números tem seu padrão de divisibilidade na base dez, se você divide um número por outra base como a base 6 ou a base 3 você vai ter frações completamente diferentes das de base 10.

Tal qual somar 10 em A, A não tem um valor, A não é uma variável matemática que você vai depois substituir por um número, A nesse caso é uma letra apenas então é ilógico você adicionar algo em uma coisa não contável. A + 10 não tem um resultado lógico assim como se eu te disser some 1 ventilador com 10 abacates, eles não vão se unir e virar uma única coisa, que é o que a soma deve fazer, eles vão continuar separados o máximo que você consegue fazer é deixar eles perto um do outro.

Agora se eu te digo some 1 saco de milho com esses 10 sacos de milho você vai ter 11 sacos de milho, se eu digo pra somar 11 sacos de milho com 1 saco de feijão você não vai ter 12 sacos de milho e nem 12 sacos de feijão, o máximo que você consegue ter é os 2 no mesmo ambiente mas sem ter somado eles, a quantidade de cada um continua igual até que você acrescente outro de mesmo tipo. Assim como no python, temos tipos diferentes que não podem se misturar.

Mas se você quiser uma linguagem com lógica bizarra a respeito de iteração entre string e inteiros da uma olhada no JavaScript, é cheio de bugs bizarros e coisas estranhas com essas iterações por lá, e tem muita gente que reclama disso.

Vou aguardar uma resposta de um dos monitores do Alura.