擅长:python、mysql、java
<p>第一种方法是合理的,在概念上与<em>集合.联合</em>和<em>集合交集做。任何<code>func(Point, Point) --> Point</code>都明显与Point类相关,因此不存在干扰类的统一性或内聚性的问题。在</p>
<p>如果涉及不同的类,这将是一个更艰难的选择:<code>draw_perpendicular(line, point) --> line</code>。要解决类的选择问题,您可以选择具有最相关逻辑的类。例如,<em>结构连接</em>需要字符串分隔符和字符串列表。它可以是一个独立的函数(就像以前使用string模块时一样),也可以是列表上的方法(但它只适用于字符串列表),或者是字符串上的方法。选择后者是因为连接更多的是字符串而不是列表。尽管这个选择导致了可以说是尴尬的表达<code>delimiter.join(things_to_join)</code>,但还是做出了这个选择。在</p>
<p>我不同意另一个建议使用类方法的受访者。它们通常用于替代构造函数签名,但不用于类实例的转换。例如,<em>日期时间.fromordinal</em>是一个类方法,用于从类的实例(在本例中,是从<em>int</em>中)构造日期的类方法。这与<em>日期时间.替换</em>这是根据现有实例生成新的datetime实例的常规方法。这将使您避免使用classmethod进行中点计算。在</p>
<p>另一个想法是:如果在Point()类中保留midpoint(),则可以创建具有相同Point API但内部表示不同的其他类(即极坐标对于某些类型的工作可能比笛卡尔坐标更方便)。如果midpoint()是一个单独的函数,那么您将开始失去封装和一致接口的好处。在</p>