求大佬告诉我为什么用__init__转换字符串行不通,而__new__可以
class Word(str):def __init__(self,a=''):
if ' 'in a:
pos=a.find(' ')
self.a=a[:pos]
else:
self.a=a
def __lt__(self,other):
if len(self)<len(other):
return True
else:
return False
def __gt__(self,other):
if len(self)>len(other):
return True
else:
return False
m=Word('asdf')
n=Word('asfgfgf')
print(m>n)
运行结果为 False 你说的转换字符串是什么意思? isdkz 发表于 2022-4-10 20:22
你说的转换字符串是什么意思?
就是把一个带空格的字符串转换成第一个空格之前的部分
比如把'abc efg'转换成‘abc’ 感谢题主问出问题,我刚学到__new__方法,对new方法还不是很懂,然后通过你提出的这个问题明白了,其实字符串是不可修改的,切片操作修改字符串是把切片后新的字符串放入一个新的地址,变量名未变,但是在类实例化完成后,类的属性的地址不会改变,也就无法使用切片操作修改字符串了,但是__new__魔法方法是在对象实例化之前,对字符串进行操作,这时候还未分配类的地址,是可以通过切片操作修改字符串的
页:
[1]