Python初始化器
我有一个Python中line类的初始化器,它以两点作为参数。问题是我的初始化器只是复制引用。因此self.point0和point 0指向同一个对象。我真的不知道如何改变这一点,以便我不只是复制引用。 线路等级:Python初始化器,python,initialization,Python,Initialization,我有一个Python中line类的初始化器,它以两点作为参数。问题是我的初始化器只是复制引用。因此self.point0和point 0指向同一个对象。我真的不知道如何改变这一点,以便我不只是复制引用。 线路等级: def __init__(self, point0, point1): self.point0 = point0 self.point1 = point1 积分等级: def __init__(self, x, y): self.x = x sel
def __init__(self, point0, point1):
self.point0 = point0
self.point1 = point1
积分等级:
def __init__(self, x, y):
self.x = x
self.y = y
使用模块:
如果点对象是可变的,如列表或字典,则需要此选项。如果您使用的是不可变类型,例如元组
,则不需要创建副本
如果点表示为列表,还可以使用以下语法复制列表:
self.point0 = point0[:]
self.point1 = point1[:]
如果您提供point类的定义,我可以更明确地建议您
OP发布
点后更新
类定义:
如果不需要copy.copy()
(为什么?),您可以手动将属性复制到新的点
实例:
class Line(object):
def __init__(self, point0, point1):
self.point0 = Point(point0.x, point0.y)
self.point1 = Point(point1.x, point1.y)
有什么特别的原因吗?…为什么你想这样而不是指向同一个对象?是的,为什么你想让它们不同?为什么
copy.copy
不令人满意?根据定义,Line
和Point
都可以很容易地重新定义为namedtuple
s。它们是不变的,也许会强制执行你喜欢的排他性copy.copy
仍然可以工作,创建新实例也可以。@clecrij请在你的问题中给出点
类的定义。一种方法是使用元组,甚至是集合。命名元组
。。。取决于你的类在做什么。@clecrij:如果你想继续你的点
类,那么你需要使用copy.copy()
,或者在行中创建点
实例。
class Line(object):
def __init__(self, point0, point1):
self.point0 = Point(point0.x, point0.y)
self.point1 = Point(point1.x, point1.y)