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

    def trasla(self, x, y):
        self.x += x
        self.y += y

    def __repr__(self):
        return "Punto: x = %d, y = %d" % (self.x, self.y)
####
    def __add__(self, punto):
        if type(punto) is Punto:
            return Punto(self.x + punto.x, self.y + punto.y)
        if type(punto) is int:
            return Punto(self.x + punto, self.y + punto)
        return NotImplemented
#####
    
    def __sub__(self, punto):
        if type(punto) is Punto:
                return Punto(self.x - punto.x, self.y - punto.y)
        if type(punto) is int:
                return Punto(self.x - punto, self.y - punto)
        return NotIplemeted

    __radd__ = __add__


    @staticmethod
    def descrizione():
        print "La classe Punto rappresenta un punto in uno spazio bidimensionale"

## ----- main -----
if __name__ == "__main__":

    p1 = Punto(10, 20)
    print p1

    print p1 + Punto(90,90)
    print p1 + 10
    print p1 - 10

    print 10 + p1

    Punto.descrizione()
