假设我有一个名为Point
的类:
class Point:
def __init__(self, x, y):
self.__x = x
self.__y = y
...
我还有一个名为Line
的班级,里面使用Point
:
class Line:
#tail and head are supposed to be Point objects
def __init__(self, tail, head):
self.__tail = tail
self.__head = head
问题是,我希望Point
使用reflect
方法,这只反映Line line
的点:
#Point class
def reflect(self, line):
#Reflection code that uses Line methods
所以我在这里有交叉引用。问题是解决这个问题的最佳方法是什么?或者我应该避免这种做法?
答案 0 :(得分:2)
不,没有交叉引用,没有循环,没有无限循环,也没有无限递归,一切都很清楚。你可以这样做:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def reflect(self, line): # line is a Line object
reflected_x = None # replace w code to calc the reflection of x vs. line
reflected_y = None # replace w code to calc the reflection of y vs. line
return Point(reflected_x, reflected_y)
class Line: # a Line defined by two Points
def __init__(self, tail, head):
self.tail = tail
self.head = head
我删除了变量中的双下划线,没有理由首先使用它。
(遵循彼得伍德在评论中的建议):反思应该 可能是非会员的功能。它似乎不是一个自然属性 或点的行为。你不希望它成为倾销场 你所有的转变。 (提示 - 可能会创建一个Transformer对象)
或者一个简单的函数,以Line和Point作为参数:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
class Line: # a Line defined by two Points
def __init__(self, tail, head):
self.tail = tail
self.head = head
def reflect(line, point): # line is a Line object
reflected_x = None # replace w code to calc the reflection of point.x vs. line
reflected_y = None # replace w code to calc the reflection of point.y vs. line
return Point(reflected_x, reflected_y)