Python初始化器

时间:2016-02-29 05:04:07

标签: python initialization

我在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

1 个答案:

答案 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)