hello? 发表于 2022-7-18 19:09:20

__new__的理解

不知道为什么,感觉我对类和对象总有点东西没想通
class CapStr(str):
    def __new__(cls,string):
      string=string.upper()
      return super().__new__(cls,string)

>>>cs=CapStr("FishC")
'FISHC'
>>>cs.lower()
'fishc'
>>>cs.__dict__
{}

就比如这段代码
有大佬可以详细讲一下它是运行流程吗?谢谢{:10_266:}

hello? 发表于 2022-7-18 19:10:05

说错了,是它的运行流程

jackz007 发表于 2022-7-18 20:31:00

本帖最后由 jackz007 于 2022-7-18 23:48 编辑

      __new__() 是类在创建对象的时候一定会自动调用的方法,也就是说,在 __new__() 被调用的时候,对象还不存在,对于本例而言,如果我们不写这个方法,在创建对象的时候,系统会自动调用 str . __new__() 方法。这个方法不属于用户方法,因为,我们无法知道这个方法需要完成哪些工作,所以,我们不可能完全重写这个方法,用来取代 str . __new__(),Python 只是给了我们一个机会,通过重载 __new__() ,在创建新的对象调用 str . __new__() 方法之前,可以先完成我们安排的工作,然后,再由我们的代码来完成对 str . __new__() 的调用,以便系统可以继续完成创建对象需要完成的其他工作。所以,在函数结束前,必须以
return super().__new__(cls,string)
      来结束函数,当然,用 str . __new__() 也是一样的
return str . __new__(cls,string)
      cs . __dict__ 之所以没有内容,是因为这个对象确实没有自己的属性,也没有属于自己的方法,字符串 'FISHC' 就是对象本身,在对象的方法中,可以通过 self 访问到这个字符串。

hello? 发表于 2022-7-19 10:23:51

jackz007 发表于 2022-7-18 20:31
__new__() 是类在创建对象的时候一定会自动调用的方法,也就是说,在 __new__() 被调用的时候,对 ...

thank you!{:10_275:}
页: [1]
查看完整版本: __new__的理解