>> y = "Hello, world!" >>> assert x is y 但是,这种行为是-6ren">
gpt4 book ai didi

python - 将不可变的 Python 对象传递给其构造函数后的标识

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:29 25 4
gpt4 key购买 nike

我理解以下行为是 not guaranteed :

>>> x = "Hello, world!"
>>> y = "Hello, world!"
>>> assert x is y

但是,这种行为是否得到保证:

>>> x = "Hello, world!"
>>> y = str(x)
>>> assert x is y

如果是这样,在我自己的(不可变)类中实现此行为的正确方法是什么?


编辑:“此行为”是指“应重用现有实例的类的构造函数”:

>>> x = MyClass("abc", 123)
>>> y = MyClass(x)
>>> assert x is y

最佳答案

覆盖 __new__() 以返回传入的对象:

class C(object):
def __new__(cls, ref):
if isinstance(ref, C):
return ref
else:
return super(C, cls).__new__(cls)

def __init__(self, ref):
if self is not ref:
self.x = ref

c1=C(7)
c2=C(13)
assert c1 is not c2
c3=C(c1)
assert c1 is c3

关于python - 将不可变的 Python 对象传递给其构造函数后的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23497011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com