Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python初始化器_Python_Initialization - Fatal编程技术网

Python初始化器

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

我有一个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
    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)