1365156784 发表于 2022-4-10 17:00:04

求大佬告诉我为什么用__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:04

你说的转换字符串是什么意思?

1365156784 发表于 2022-4-11 16:47:46

isdkz 发表于 2022-4-10 20:22
你说的转换字符串是什么意思?

就是把一个带空格的字符串转换成第一个空格之前的部分
比如把'abc   efg'转换成‘abc’

请叫我小耗耗 发表于 2023-3-5 14:27:39

感谢题主问出问题,我刚学到__new__方法,对new方法还不是很懂,然后通过你提出的这个问题明白了,其实字符串是不可修改的,切片操作修改字符串是把切片后新的字符串放入一个新的地址,变量名未变,但是在类实例化完成后,类的属性的地址不会改变,也就无法使用切片操作修改字符串了,但是__new__魔法方法是在对象实例化之前,对字符串进行操作,这时候还未分配类的地址,是可以通过切片操作修改字符串的
页: [1]
查看完整版本: 求大佬告诉我为什么用__init__转换字符串行不通,而__new__可以