我已经基于默认的str
类创建了新类。我还更改了__add__
,__mul__
,__repr__
等默认方法。但是我希望在用户将旧变量等同于旧变量时更改默认行为。看看我现在拥有的东西:
a = stream('new stream')
b = a
b += ' was modified'
a == b
>>> True
print a
>>> stream('new stream was modified')
print b
>>> stream('new stream was modified')
因此,每当我修改第二个变量时,Python也会改变原始变量。据我所知,Python只需将变量a
的地址发送给变量b
。是否可以像通常str
一样在创建时制作变量的副本?我认为我需要像C ++中的 new
一样。
a = 'new string'
b = a
b += ' was modified'
a == b
>>> False
P.S。对象的创建始于self。 new ()方法。创作是这样的:
def __new__(self, string):
return(str.__new__(self, string))
它更复杂,因为它处理unicode和QString类型,首先从它们获取str对象,但我认为这不是必要的。
答案 0 :(得分:1)
我不相信你可以改变赋值运算符的行为,但是有明确的方法来创建对象的副本而不仅仅是使用引用。对于复杂对象,请查看copy module。对于基本序列类型(如str
),以下工作假设您正确实现切片:
a = str('abc')
#A slice creates a copy of a sequence object.
#[:] creates a copy of the entire thing.
b = a[:]
#Since b is a full copy of a, this will not modify a
b += ' was modified'
#Check the various values
print('a == b' + str(a == b))
print(a)
print(b)
False
abc
abc was modified