我在Python中有一个线类的初始化器,它需要两个点作为参数。问题是我的初始化者只是复制引用。所以self.point0和point 0指向同一个对象。我不确定如何更改它,以便我不只是复制引用。 行类:
def __init__(self, point0, point1):
self.point0 = point0
self.point1 = point1
点类:
def __init__(self, x, y):
self.x = x
self.y = y
答案 0 :(得分:3)
使用copy
模块:
import copy
def __init__(self, point0, point1):
self.point0 = copy.copy(point0)
self.point1 = copy.copy(point1)
如果您的点对象是可变的,例如列表或词典,则这是必需的。如果您使用的是不可变类型,例如tuple
,那么就不需要复制。
如果您的积分表示为列表,您还可以使用以下语法复制列表:
self.point0 = point0[:]
self.point1 = point1[:]
如果你提供了你的分类的定义,我可以更确定地告诉你。
OP发布Point
类定义后更新:
如果copy.copy()
不合适(为什么?),您可以手动将属性复制到新的Point
实例:
class Line(object):
def __init__(self, point0, point1):
self.point0 = Point(point0.x, point0.y)
self.point1 = Point(point1.x, point1.y)