# Punto: crea una clase que representa puntos 2D.
# Poo.

import math


class Punto:
    """Representa puntos formados por las coordenadas x e y"""

    ORIGEN = None
    num_puntos = 0

    @staticmethod
    def get_origen():
        if Punto.ORIGEN == None:
            Punto.ORIGEN = Punto(0, 0)

        return Punto.ORIGEN

    def __init__(self, x, y):
        """Crea un nuevo punto, dadas las coordenadas.

            :param x: Coordenada x del punto
            :param y: Coordenada y del punto
        """
        self.x = x
        self.y = y
        Punto.num_puntos += 1

    def calcula_distancia(self, p2):
        """Retorna la distancia entre este punto y otro
        
            :param: p2 El otro punto.
            :return: La distancia entre este punto y p2.
        """
        distancia_x = self.x - p2.x
        distancia_y = self.y - p2.y
        return math.sqrt((distancia_x ** 2) + (distancia_y ** 2))

    def calcula_distancia_origen(self):
        """Retorna la distancia desde el origen de coordenadas
            a este punto
            
            :return: La distancia entre ambos puntos"""
        return self.calcula_distancia(Punto(0, 0))

    def __str__(self):
        return str.format("({0}, {1})", self.x, self.y)

if __name__ == "__main__":
    p0 = Punto.get_origen()
    p1 = Punto(3, 4)
    p2 = Punto(5, 5)

    print("Punto 0: " + str(p0))
    print("Punto 1: " + str(p1))

    print("De", str(p0), "a", str(p1), ":", p1.calcula_distancia(p0))
    print("De", str(p0), "a", str(p2), ":", p2.calcula_distancia_origen())
