Python 面向对象编程风格决策

Python 面向对象编程风格决策,python,oop,Python,Oop,我只是有一个关于OOP编程的快速问题,我一直很难决定。前提是我正在创建一组非常简单的几何类,比如顶点、角度和向量对象,但是其中一个类,具体来说就是直线类,有点不同。它基本上只是一组我只使用一次的方法,我从来没有实际保存一个line对象供以后使用或在程序中的任何其他地方回忆数据。举例说明我的观点: class Line: def __init__(self, vertex1, vertex2): self.start = vertex1 self.end =

我只是有一个关于OOP编程的快速问题,我一直很难决定。前提是我正在创建一组非常简单的几何类,比如顶点、角度和向量对象,但是其中一个类,具体来说就是直线类,有点不同。它基本上只是一组我只使用一次的方法,我从来没有实际保存一个line对象供以后使用或在程序中的任何其他地方回忆数据。举例说明我的观点:

class Line:
    def __init__(self, vertex1, vertex2):
        self.start = vertex1
        self.end = vertex2
    def to_the_left(self, vertex):
        """Check to see if a vertex is to the left of the line segment."""
        #code stuff

data = Line(Vertex(0, 0), Vertex(10, 0)).to_the_left(Vertex(5, 5))
我只实例化一次
行(顶点(0,0),顶点(10,0))
来检索
数据。所以我想我最好还是有一堆可用的函数,而不是把它们都打包到一个类中,但是我对这样做持怀疑态度,因为有很多方法需要转换成函数

我想做的另一件事是创建一个Line类,然后将它的所有方法转换为普通函数,如下所示:

#continuing from the code above
def to_the_left(line_start, line_end, vertex):
    return Line(line_start, line_end).to_the_left(vertex)
data = to_the_left(Vertex(0, 0), Vertex(10, 0), Vertex(5, 5))

您认为我应该使用哪种方法?

我会选择使用对象,因为您可能需要在线执行多个操作

例如,如果长度在左边,您可以计算长度,以及其他一些操作。你可能需要把线传过去谁知道呢

你可能想考虑的是使用行和顶点,而不是使用这两个向量。如果你的顶点有x,y,你可以做一个有x,y,w的向量。 在这个方案中,顶点w=1,直线w=0,这将简化大量代码


查找同质坐标了解更多信息

旁注:您应该像
类行(对象):
那样声明类。这被称为a,如果您点击该链接,您可以了解到许多好处。现在不存储对
对象的直接引用并不意味着您将来不会存储。也就是说,把
顶点
变成
线
工厂怎么样<代码>顶点(0,0)。用(顶点(10,0))
(而且你的
线
s实际上是
s,你应该叫它们