Python oop传递一个对象作为参数,并在另一个对象的方法中使用它的方法

时间:2018-03-11 16:46:53

标签: python python-3.x class oop object

我想将类的对象作为参数传递给同一个类的一个方法。

Stack Overflow上有一些答案,但它们包含了没有方法的非常简单的例子。是的,我知道,传递一个对象与传递整数没有什么不同。问题是,当我以与整数相同的方式将其作为参数传递时,我在调用类的方法时出错。

这是我的例子。

我班上的目标是重点。它有两个属性,即x,y坐标。我想要一个方法,它将计算从对象到另一个传递的对象的距离。我使用getter来获取属性的值。

import math

class Point:
    """Point class, whose object is a point"""

    def __init__(self, m_x=0, m_y=0):
        self._x = m_x
        self._y = m_y

    @property
    def X(self):
        """X coordinate"""
        return self._x

    @X.setter
    def X(self, m_x):
        self._x = m_x

    @property
    def Y(self):
        """Y coordinate"""
        return self._y

    @Y.setter
    def Y(self, m_y):
        self._y = m_y

    def ToString(self):
        """Prints a string with coordinates"""
        print("Point x: {}, y: {}".format(self._x, self._y))

    def DistanceOrigin(self):
        """Calculates a distance to the origin of the coordinate axis (0,0)"""
        return math.sqrt((self._x ** 2) + (self._y ** 2))

    def Distance(self, m_object):
        """Calculates a distance to another object"""
        return math.sqrt(((self._x - m_object.X) ** 2) + (self._y - m_object.Y ** 2))

p = Point(3, 4)

p.ToString()
print(p.DistanceOrigin())

p.X = 2

print(p.X)

q = Point(2, 3)

q.Distance(p) # Here appears the error

错误出现在最后一行。

line 34, in Distance
    return math.sqrt(((self._x - m_object.X) ** 2) + (self._y - m_object.Y ** 2))
ValueError: math domain error

那么如何将对象1作为参数传递给另一个对象2,以便我可以在对象2的方法中使用方法对象1?

2 个答案:

答案 0 :(得分:0)

    return math.sqrt(((self._x - m_object.X) ** 2) + (self._y - m_object.Y ** 2))

应该是:

    return math.sqrt(((self._x - m_object.X) ** 2) + ((self._y - m_object.Y) ** 2))

你忘了围绕Y差异的括号。

答案 1 :(得分:0)

问题在于math.sqrt函数。它不接受负数。

    return math.sqrt(((self._x - m_object.X) ** 2) + ((self._y - m_object.Y) ** 2))

是正确的方法。