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