类的聚合和组合
第1题:创建一个 Shape 类,传递顶点列表并将这些顶点存储为受保护的属性。这个新类是聚合的一个示例,因为顶点可以独立于形状而存在--可以说一个形状 "有一些 "顶点。当一个类的对象与另一个类的对象一起初始化时,这就是聚合的有力证明,因为如果是组合关系,则形状需要创建自己的顶点。
实现具有以下功能的类:
属性(受保护的):vertices (受保护的顶点对象列表,用于定义形状)
方法: def __init__(self, vertices): # 初始化形状
def get_vertices(self) #返回顶点列表
def set_vertices(self, vertices) # 设置新的顶点列表
def __eq__(self, other) # 当形状的顶点是相同的返回True - 无序
第2题:
现在,让我们来看看组成的示例。创建一个 "正方形 "类,该类接受原点和正方形边长,并通过计算正方形的角来创建自己的受保护顶点列表,然后将每个角存储在一个列表中,作为 "顶点 "类的一个实例。
在许多情况下,在聚合和组合之间做出决定是一个略显灰色的领域。不过,在本例中,我们可以说角是正方形的一部分,由正方形创建,并且不受任何其他形状的保护。因此,正方形是由角组成的。
创建正方形的步骤如下
属性(受保护的):corners (受保护的顶点对象列表,用于定义形状)
方法:def __init__(self, origin, side_length) # 正方形的顶点原点和边长
def get_corners(self) # 返回定义形状的顶点列表
def __eq__(self, other) # 如果正方形的大小和原点相同,则返回 True
def __repr__(self) # 返回一个逗号分隔的角列表,如'(1, 1), (1, 3), (3, 3), (3, 1)' 第1题:
class Shape:
def __init__(self, vertices):
self._vertices = vertices
def get_vertices(self):
return self._vertices
def set_vertices(self, vertices):
self._vertices = vertices
def __eq__(self, other):
return set(self._vertices) == set(other.get_vertices())
在上述代码中,我们创建了一个名为 Shape 的类,该类接受一个顶点列表并将其存储为受保护的属性。我们还实现了三个方法:一个用于返回顶点列表,一个用于设置新的顶点列表,以及一个用于比较两个形状的顶点是否相同。
第2题:
class Square:
def __init__(self, origin, side_length):
self._origin = origin
self._side_length = side_length
x, y = origin
self._corners = [(x, y), (x + side_length, y), (x + side_length, y + side_length), (x, y + side_length)]
def get_corners(self):
return self._corners
def __eq__(self, other):
return self._origin == other._origin and self._side_length == other._side_length
def __repr__(self):
return ', '.join(str(corner) for corner in self._corners)
在上述代码中,我们创建了一个名为 Square 的类,该类接受一个原点和边长,并通过计算正方形的角来创建自己的受保护顶点列表。我们还实现了三个方法:一个用于返回定义形状的顶点列表,一个用于比较两个正方形大小和原点是否相同,以及一个用于返回一个逗号分隔的角列表。
页:
[1]