鱼C论坛

 找回密码
 立即注册
查看: 1591|回复: 3

[已解决]__new__的理解

[复制链接]
发表于 2022-7-18 19:09:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

就比如这段代码
有大佬可以详细讲一下它是运行流程吗?谢谢
最佳答案
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 访问到这个字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-18 19:10:05 | 显示全部楼层
说错了,是它的运行流程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 访问到这个字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 10:23:51 | 显示全部楼层
jackz007 发表于 2022-7-18 20:31
__new__() 是类在创建对象的时候一定会自动调用的方法,也就是说,在 __new__() 被调用的时候,对 ...

thank you!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 14:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表