Kur0 发表于 2020-4-7 20:46:02

关于__new__这个方法越看越懵


class CapStr(str):
      def __new__(cls,string):
                string=string.upper()
                return str.__new__(cls,string)
最后一个为什么要   return str.__new__(cls,string)   ,我直接 return string 不行么

BngThea 发表于 2020-4-7 20:53:22

不用纠结这些问题,实际中用到的概率接近于零。

永恒的蓝色梦想 发表于 2020-4-7 21:44:05

如果 return string 的话,那么就可以这么写了CapStr=str.upper

Kur0 发表于 2020-4-7 23:08:27

永恒的蓝色梦想 发表于 2020-4-7 21:44
如果 return string 的话,那么就可以这么写了

啥意思 ?

永恒的蓝色梦想 发表于 2020-4-8 09:15:07

Kur0 发表于 2020-4-7 23:08
啥意思 ?

如果你要 return string 的话,那么它就和 str.upper 一样了

zltzlt 发表于 2020-4-8 13:04:42

type 值不同:

>>> class CapStr(str):
      def __new__(cls,string):
                string=string.upper()
                return str.__new__(cls,string)

      
>>> type(CapStr('abc'))
<class '__main__.CapStr'>
>>> class CapStr(str):
      def __new__(cls,string):
                string=string.upper()
                return string

      
>>> type(CapStr('abc'))
<class 'str'>
页: [1]
查看完整版本: 关于__new__这个方法越看越懵