zltzlt 发表于 2020-4-8 13:22:48

Python FAQ 032 __new__ 魔法方法的相关问题

Python FAQ 032 __new__ 魔法方法的相关问题

问题

最后一句为什么要 return str.__new__(cls, string),直接 return string 不行吗??

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

解答

直接 return string 当然可以,可是他们的 type 不同:

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

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

      
>>> type(CapStr('abc'))    # 类型是 str
<class 'str'>

如果直接 return string 的话,那么就和 str.upper 一样了

CapStr = str.upper

                                                                                                                                        —— @永恒的蓝色梦想

永恒的蓝色梦想 发表于 2020-4-8 13:31:54

{:10_256:}

一个账号 发表于 2020-4-12 10:57:01

{:10_256:}
页: [1]
查看完整版本: Python FAQ 032 __new__ 魔法方法的相关问题