specialist/more_class.py

62 lines
1.9 KiB
Python

from math import sqrt
from multipledispatch import dispatch
class PointXY():
def distance_from_zero(point):
return sqrt( point.x ** 2 + point.y ** 2 )
def distance_to(self, point):
return sqrt( (point.x - self.x) ** 2 + (point.y - self.y) ** 2)
def if_inside(self, r):
if (r.a.x <= self.x <= r.b.x) and (r.a.y <= self.y <= r.b.y):
return 'точка внутри прямоуголника'
return 'точка вне прямоугольника'
def __init__(self, x:int, y:int):
self.x = x
self.y = y
def __str__(self):
return 'x = ' + str(self.x) + ' y = ' + str(self.y)
class Rect():
def area(self):
return self.lenght * self.width
def perimeter(self):
return (self.lenght + self.width) * 2
def scale(self, coef):
self.lenght *= coef
self.width *= coef
def rotate(self):
self.lenght, self.width = self.width, self.lenght
def has_inside(self, p: PointXY):
if (self.a.x <= p.x <= self.b.x) and (self.a.y <= p.y <= self.b.y):
return 'точка внутри прямоуголника'
else:
return 'точка вне прямоугольника'
@dispatch(int, int)
def __init__(self, x: int, y: int):
self.lenght = x
self.width = y
@dispatch(PointXY, PointXY)
def __init__(self, a: PointXY, b: PointXY):
self.a = a
self.b = b
self.lenght = sqrt((a.x - a.x) ** 2 + (b.x - a.y) ** 2)
self.width = sqrt((b.x - a.x) ** 2 + (b.y - b.x) ** 2)
def __str__(self):
if str(hasattr(self, 'a')) == 'False':
return 'x = ' + str(self.lenght) + ' y = ' + str(self.width)
else:
return 'x = ' + str(self.lenght) + ' y = ' + str(self.width) + ' a(' + str(self.a.x) + ':' + str(self.a.y) + ')' + ' b(' + str(self.b.x) + ':' + str(self.b.y) + ')'