Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Entendendo os métodos especiais __eq__ e __repr__

class Coordinate(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def getX(self):
        # Getter method for a Coordinate object's x coordinate.
        # Getter methods are better practice than just accessing an attribute directly
        return self.x

    def getY(self):
        # Getter method for a Coordinate object's y coordinate
        return self.y

    def __str__(self):
        return '<' + str(self.getX()) + ',' + str(self.getY()) + '>'

Tarefas:

Adicionar um método eq que retorna True se coordinates se refere ao mesmo ponto no plano (isto é, tem as mesmas coordenas X e Y

Definir repr,um método especial que retorna uma string que se parece com uma expressão Python válida que pode ser usada para recriar um objeto com o mesmo valor. Em outras palavras, eval (repr (c)) = = c, dada a definição de eq da parte 1.

Minha tentativa:

class Coordinate(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def getX(self):
        # Getter method for a Coordinate object's x coordinate.
        # Getter methods are better practice than just accessing an attribute directly
        return self.x

    def getY(self):
        # Getter method for a Coordinate object's y coordinate
        return self.y

    def __str__(self):
        return '<' + str(self.getX()) + ',' + str(self.getY()) + '>'

    def __eq__(self, other):
        if self.x == other.x and self.y == other.y :
            return True
        else:
            return False

Não consegui entender o método repr Poderiam ajudar?

1 resposta
solução!

Olá Edson,

O método str() devolve uma string que representa o objeto como queremos que seja mostrado para o usuário. Já o método repr() faz a mesma coisa, mas retorna uma string que representa o objeto como o desenvolvedor quer vê-lo.

Vamos lá: "Você deve definir repr como um método especial que retorna uma string que se parece com uma expressão Python válida que pode ser usada para recriar um objeto com o mesmo valor".

Por exemplo, para criar um objeto da classe Coordinate temos que fazer:

c = Coordinate(1, 2)

então, nossa string retornada por repr deve seguir este padrão. Podemos usar a função type() para pegar o tipo da classe passando a instância (self) e usar o __name__ para pegarmos o nome Coordinate e guardar em uma variável nome_da_classe e depois retornar a string <nome_da_classe>(<valro x>, <valor y>):

def __repr__(self):
    nome_da_classe = type(self).__name__
    return '{}({}, {})'.format(nome_da_classe, self.x, self.y)

Agora, você pode testar utilizando a função eval:

    >>> c1 = Coordinate(3, 4)
    >>> print(c1)
    <3, 4>
    >>> c2 = eval(repr(c))
    >>> print(c2)
    <3, 4>
    >>> print(c1 == c2)
    True
    >>> print(repr(c2)
    Coordinate(3, 4)

a função eval() interage com o interpretador e avalia uma string como uma expressão Python. Então, na linha c2 = eval(repr(c) o que está sendo feito é c2 = Coordinate(3, 4)

Espero ter ajudado e bons estudos!