association.py 1.3 KB
Newer Older
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
"""
对象之间的关联关系

Version: 0.1
Author: 骆昊
Date: 2018-03-12
"""

from math import sqrt


class Point(object):

J
jackfrued 已提交
14 15 16
    def __init__(self, x=0, y=0):
        self._x = x
        self._y = y
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
17

J
jackfrued 已提交
18 19 20
    def move_to(self, x, y):
        self._x = x
        self._y = y
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
21

J
jackfrued 已提交
22 23 24
    def move_by(self, dx, dy):
        self._x += dx
        self._y += dy
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
25

J
jackfrued 已提交
26 27 28 29
    def distance_to(self, other):
        dx = self._x - other._x
        dy = self._y - other._y
        return sqrt(dx ** 2 + dy ** 2)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
30

J
jackfrued 已提交
31 32
    def __str__(self):
        return '(%s, %s)' % (str(self._x), str(self._y))
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
33 34 35 36


class Line(object):

J
jackfrued 已提交
37 38 39
    def __init__(self, start=Point(0, 0), end=Point(0, 0)):
        self._start = start
        self._end = end
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
40

J
jackfrued 已提交
41 42 43
    @property
    def start(self):
        return self._start
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
44

J
jackfrued 已提交
45 46 47
    @start.setter
    def start(self, start):
        self._start = start
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
48

J
jackfrued 已提交
49 50 51
    @property
    def end(self):
        return self.end
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
52

J
jackfrued 已提交
53 54 55
    @end.setter
    def end(self, end):
        self._end = end
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
56

J
jackfrued 已提交
57 58 59
    @property
    def length(self):
        return self._start.distance_to(self._end)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
60 61 62


if __name__ == '__main__':
J
jackfrued 已提交
63 64 65 66 67 68 69 70 71
    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)