Quem sabe alguma coisa de Ruby ja se deparou com algumas caracteristicas da linguagens, como a não existencia de tipos primitovos: tudo é objeto, incluindo o numero 1.
Quando eu faço, em Ruby, algo como
i = 1 + 2
estou fazendo, na verdade,
i = 1.+( 2 )
Pois o 1 é um objeto da classe FixNum, que responde ao método + (simbolo de adição).
E no Python, sera que isso funciona? Na verdade a coisa é ligeiramente diferente!
i = 1 + 2
é equivalente à
i = (1).__add__(2)
É claro que vão falar: puxa, eu tenho que colocar os parentesis ao redor do 1 para invocar um método (que não tem o mesmo nome do operador + e sim algo bizarro como __XPTO__). Isso se deve à como o interpretador funciona, que vê o primeiro ‘.’ apos um numero como o delimitador da parte inteira da parte não-inteira.
É possivel, então, fazer a mesma coisa que eu faço com Ruby de duas formas:
i = int(1).__add__(2) # ou i = 1.0.__add__(2)
Percebam o 1.0.metodo tinhoso ali: eu estou invocando um método do objeto 1.0 – da mesma forma que o Ruby ou outras linguagens totalmente OO – apenas a sintaxe difere um pouco.
Don’t buy it.
Este problema dos parenteses é facilmente resolvido com uma mudança simples na gramática, não? Basta dizer que após o ponto ou segue um número correspondente à parte fracionária ou segue o identificador de um método.
Com certeza, e essa alteração deve ser algo muito simple e sem problemas de backward compatibility a principio
Você pode usar um espaço também:
>>> 1 .__add__(2)
3
É verdade. Curiosa esta sintaxe!