# Poo
# Crea, mediante composición, una clase línea que permita modelar líneas que
# se componen de un punto inicial y otro final.

import math

# No es posible importar el módulo punto en IDEOne, aunque esté presente.
#import punto


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)


class Linea:
    """Representa lins. formadas por dos puntos, p1 y p2."""

    def __init__(self, x1, y1, x2, y2):
        """Crea nuevas lins., dados dos puntos.

            :param x1: Coordenada x del primer punto
            :param y1: Coordenada y del primer punto
            :param x2: Coordenada x del segundo punto
            :param y2: Coordenada y del segundo punto
        """
        self.p1 = Punto(x1, y1)
        self.p2 = Punto(x2, y2)

    def calcula_longitud(self):
        """Calcula la longitud, distancia entre los dos puntos."""
        return self.p1.calcula_distancia(self.p2)

    def __str__(self):
        return "({0}, {1})".format(self.p1, self.p2)

if __name__ == "__main__":
    l = Linea(1, 2, 3, 4)
    print("Línea:", l,"de longitud:", l.calcula_longitud())
