有以下代码片段:
import numpy as np
class Points():
def __init__(self, x, y):
self.x = x
self.y = y
def distance(point_2, point_1):
return np.sqrt((point_2.x-point_1.x)**2+(point_2.y-point_1.y)**2)
class Calculator():
def distance(point_1, point_2):
return np.sqrt((point_2.x-point_1.x)**2+(point_2.y-point_1.y)**2)
pt2, pt1 = Points(10, 3), Points(0, 0)
x_1 = Points.distance(pt2, pt1)
x_2 = pt2.distance(pt1)
x_3 = Calculator.distance(pt2, pt1)
1)是否可以像这样调用类的实例Points:在pt2类pt1方法内部Calcuclator还是需要某种构造函数Calcuclator?
2)如何更正确的组织类,也就是个人感知,创建一个额外的类Calculator,以类实例Points作为数据类型进行操作比较方便,还是需要遵循一定的专注原则,为自己创建方法?Points里面Points?
PS即使是混淆的例子x_2,它看起来也不好看,或者该方法原则上没有正确组织Points.distance()。很明显,比如把一个图组织成一个类的时候,get_nodes在类里面声明一个方法是很方便的,但是这种情况怎么办呢?或者,也许您根本不需要重写工程垃圾代码,而只需声明一些函数?
pt1,pt2) - 如果这些不是一些通用参数(“常量”)。因为它现在已经实现了——这个选项很正常,只是最好将方法设为静态——在@staticmethod上面添加一个装饰器def distance(point_1, point_2):Point您可以将其保留为数据类(即,仅将其用于存储数据,如经典 C 中的结构),并将与该类一起使用的所有函数存储在同一模块中。一般来说,最好不要“以防万一”创建通用类——这是通往上帝对象反模式的直接途径。尽管存储所有内容的模块与这样的“神圣”类也没有太大区别。x_1,x_2,x_3)都可以接受,我不知道第二个选项有什么让您感到困惑。如果要处理图形,那么自然不应将此类函数添加到类
Point中,但最好为图形创建一个单独的类,并在其中定义用于处理图形的函数。此外,图可以在内部以不同的方式表示,相同的获取顶点的函数可以以完全不同的方式工作。