python
class C(str):def __new__(cls,string):
string = string.upper()
return str.__new__(cls,string)
为什么这里说str不可变
>>>a = 'i love xjy'
>>>a = 'I LOVE XJY'
>>> a
'I LOVE XJY'
这里不是直接变了吗。 a是变量!a的类型是str!
而''i love xjy''才是字符串对象!
a指向的对象的内容才是'i love xjy' str 是不可变类型的值,所以需要重写 new 而不是 init 如果你重新 init 就会发现你不能将字母成功大写返回,就是因为str 是不可变类型的值,int,tuple,float都是不可变类型,所以重新继承这些类的,都需要重新new,而不是init Tip0 发表于 2020-7-17 14:53
str 是不可变类型的值,所以需要重写 new 而不是 init 如果你重新 init 就会发现你不能将字母成功大写返回 ...
他的不可变是你输入的那些东西不能有所改变吗 Tip0 发表于 2020-7-17 14:53
str 是不可变类型的值,所以需要重写 new 而不是 init 如果你重新 init 就会发现你不能将字母成功大写返回 ...
init会改变你输入的这个值,但是new会新建一个值然后对这个新建值进行改变最后输出这个值。是这个意思吗。 breaki 发表于 2020-7-17 15:10
init会改变你输入的这个值,但是new会新建一个值然后对这个值进行改变最后输出这个值。是这个意思吗。
嗯,new可以设置返回值,而init不行,所以不能将改变后的值返回
页:
[1]