我想将类的对象作为参数传递给同一个类的一个方法。
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?
答案 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))
是正确的方法。