Я создал новый класс на основе класса 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
?Как мне кажется, мне нужно что-то вроде new
в C ++.
a = 'new string'
b = a
b += ' was modified'
a == b
>>> False
PS Создание объекта начинается в самом себе. new () метод.Создание сделано так:
def __new__(self, string):
return(str.__new__(self, string))
Это сложнее, потому что он заботится о Unicode и типе QString, сначала получая от них объект str, но я думаю, что это не обязательно.