鱼C论坛

 找回密码
 立即注册
查看: 1706|回复: 1

类的聚合和组合

[复制链接]
发表于 2023-9-12 08:49:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第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)'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-12 08:49:27 | 显示全部楼层
第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 的类,该类接受一个原点和边长,并通过计算正方形的角来创建自己的受保护顶点列表。我们还实现了三个方法:一个用于返回定义形状的顶点列表,一个用于比较两个正方形大小和原点是否相同,以及一个用于返回一个逗号分隔的角列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表