72 lines
1.3 KiB
Python
72 lines
1.3 KiB
Python
|
"""
|
||
|
对象之间的关联关系
|
||
|
|
||
|
Version: 0.1
|
||
|
Author: 骆昊
|
||
|
Date: 2018-03-12
|
||
|
"""
|
||
|
|
||
|
from math import sqrt
|
||
|
|
||
|
|
||
|
class Point(object):
|
||
|
|
||
|
def __init__(self, x=0, y=0):
|
||
|
self._x = x
|
||
|
self._y = y
|
||
|
|
||
|
def move_to(self, x, y):
|
||
|
self._x = x
|
||
|
self._y = y
|
||
|
|
||
|
def move_by(self, dx, dy):
|
||
|
self._x += dx
|
||
|
self._y += dy
|
||
|
|
||
|
def distance_to(self, other):
|
||
|
dx = self._x - other._x
|
||
|
dy = self._y - other._y
|
||
|
return sqrt(dx ** 2 + dy ** 2)
|
||
|
|
||
|
def __str__(self):
|
||
|
return '(%s, %s)' % (str(self._x), str(self._y))
|
||
|
|
||
|
|
||
|
class Line(object):
|
||
|
|
||
|
def __init__(self, start=Point(0, 0), end=Point(0, 0)):
|
||
|
self._start = start
|
||
|
self._end = end
|
||
|
|
||
|
@property
|
||
|
def start(self):
|
||
|
return self._start
|
||
|
|
||
|
@start.setter
|
||
|
def start(self, start):
|
||
|
self._start = start
|
||
|
|
||
|
@property
|
||
|
def end(self):
|
||
|
return self.end
|
||
|
|
||
|
@end.setter
|
||
|
def end(self, end):
|
||
|
self._end = end
|
||
|
|
||
|
@property
|
||
|
def length(self):
|
||
|
return self._start.distance_to(self._end)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
p1 = Point(3, 5)
|
||
|
print(p1)
|
||
|
p2 = Point(-2, -1.5)
|
||
|
print(p2)
|
||
|
line = Line(p1, p2)
|
||
|
print(line.length)
|
||
|
line.start.move_to(2, 1)
|
||
|
line.end = Point(1, 2)
|
||
|
print(line.length)
|