我有一个包含类引用的类属性
class UserEnvironment(object):
_user = None
def __init__(self, session_id):
self._user = User(session_id)
def create_user(self):
# copy self._user modify the copy and return it without modifying original object.
我需要做的是获取 self._user 并从中创建一个新实例,然后返回引用而不修改原始对象。我怎样才能做到这一点?
最佳答案
首先,不要将 _user
定义为类成员。删除该语句,否则所有类实例的 _user
都将相同。可能不是您想要的。
然后,要“克隆”用户,只需像这样使用 copy.deepcopy
即可;
导入副本
class UserEnvironment(object):
def __init__(self, session_id):
self._user = User(session_id)
def create_user(self):
# copy self._user modify the copy and return it without modifying original object.
return copy.deepcopy(self._user)
请注意,copy.deepcopy
会递归地克隆所有 成员,如果您的类引用自身或永不更改的大数据集,这可能会出现问题。
根据情况,您可以使用copy.copy
,或者只是创建您自己的自定义clone
方法,例如如下所示:
class User(object):
def __init__(self, session_id):
self.__session_id = session_id
self.__random = random.random()
def clone(self):
u = User(self.__session_id)
# overwrite the random field by ours
u.__random = self.__random
return u
关于python - 在 Python 中创建对实例化类的新引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350071/