定义Python类

定义Python类,python,Python,正如我在前面的问题中可能已经说过的那样,我是Python的初学者,并且我一直在讨论的一些主题没有给出我需要理解的深入解释,因此我有一个问题。我们要问的问题是“将方法距离()添加到类点。它将另一个点对象作为输入,并返回到该点的距离(从调用该方法的点算起) 当这些都输入到模块中时,它所寻找的是以下结果 >>> c = Point() >>> c.setx(0) >>> c.sety(1) >>> d = Point() >

正如我在前面的问题中可能已经说过的那样,我是Python的初学者,并且我一直在讨论的一些主题没有给出我需要理解的深入解释,因此我有一个问题。我们要问的问题是“将方法距离()添加到类点。它将另一个点对象作为输入,并返回到该点的距离(从调用该方法的点算起)

当这些都输入到模块中时,它所寻找的是以下结果

>>> c = Point()
>>> c.setx(0)
>>> c.sety(1)
>>> d = Point()
>>> d.setx(1)
>>> d.sety(0)
>>> c.distance(d)
1.4142135623730951
以下是我所拥有的:

class Point:
    def setx(self, xcoord):
        self.x = xcoord
    def sety(self, ycoord):
        self.y = ycoord
    def get(self):
        return(self.x, self.y)
    def move(self, dx, dy):
        self.x += dx
        self.y += dy
然后我不确定我是否需要以什么方式定义距离。谢谢


我有一个明确的基准,我很确定我将如何开始这项工作,但当涉及到定义距离时,我非常困惑。

你需要这样的方法

def distance(self, other):
    dist = math.hypot(self.x - other.x, self.y - other.y)
    return dist
您还需要在程序开始时导入数学

旁白:拥有
setx
sety
方法根本不是pythonic。你应该直接分配属性。例如
c.x=0

Help on built-in function hypot in module math: hypot(...) hypot(x, y) Return the Euclidean distance, sqrt(x*x + y*y). 模块数学中内置函数hypot的帮助: 低血压(…) 低血压(x,y) 返回欧几里德距离sqrt(x*x+y*y)。
下面是一个没有设置和获取的示例。
\uuuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是可选的。我添加了
\u

class Point:
    def __init__(self, *terms):
        self.x = 0
        self.y = 0
    def __call__(self):
        return(self.x, self.y)
    def move(self, dx, dy):
        self.x += dx
        self.y += dy
    def distance(self, other):
        dist = math.hypot(self.x - other.x, self.y - other.y)
        return dist

>>> c = Point()
>>> c.x = 0
>>> c.y = 1
>>> d = Point()
>>> d.x = 1
>>> d.y = 0
>>> c()
(1, 0)
>>> c.distance(d)
1.4142135623730951

请不要在Python中使用getter和setter。只需直接访问实例变量,或用于非平凡的实例变量。