Python é orientado à objetos. E bem orientado!

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.

Rating 4.00 out of 5
[?]

Tags: , ,

4 comentários para “Python é orientado à objetos. E bem orientado!”

  1. 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.

  2. admin disse:

    Com certeza, e essa alteração deve ser algo muito simple e sem problemas de backward compatibility a principio

  3. Você pode usar um espaço também:

    >>> 1 .__add__(2)
    3

  4. admin disse:

    É verdade. Curiosa esta sintaxe!

Deixe um comentário