鱼C论坛

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

[已解决]Python 类 __new__ 的return问题

[复制链接]
发表于 2017-10-10 20:53:54 | 显示全部楼层 |阅读模式
5鱼币
新人有一项疑问,代码如下
class Rstr(str):
    def __new__(cls,word):
         return str.__new__(cls,word)

最后return中为何要返回父类的str.__new__(cls,word)?

他返回的倒是是什么东西?

以及在实际项目中,什么时候需要用到,或者他有什么作用,谢谢。
最佳答案
2017-10-10 20:53:55
最后return中为何要返回父类的str.__new__(cls,word)?
答: 因为__new__方法要求要返回一个实例化的对象,对word对象进行修改后直接调用父类的__new__方法进行处理即可

他返回的倒是是什么东西?
答: 返回的就是一个本类的对象,但是这里返回的是父类str的一个实例化对象

以及在实际项目中,什么时候需要用到,或者他有什么作用
答:绝大多数时候不需要写这个魔法方法,只有当父类是不可变类型,但又想改变它,比如父类是str为不可变类,我想将其对象自动变为全部大写,这里就满足上述条件,将可以重写该魔法方法

最佳答案

查看完整内容

最后return中为何要返回父类的str.__new__(cls,word)? 答: 因为__new__方法要求要返回一个实例化的对象,对word对象进行修改后直接调用父类的__new__方法进行处理即可 他返回的倒是是什么东西? 答: 返回的就是一个本类的对象,但是这里返回的是父类str的一个实例化对象 以及在实际项目中,什么时候需要用到,或者他有什么作用 答:绝大多数时候不需要写这个魔法方法,只有当父类是不可变类型,但又想改变它,比如父类 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-10 20:53:55 | 显示全部楼层    本楼为最佳答案   
最后return中为何要返回父类的str.__new__(cls,word)?
答: 因为__new__方法要求要返回一个实例化的对象,对word对象进行修改后直接调用父类的__new__方法进行处理即可

他返回的倒是是什么东西?
答: 返回的就是一个本类的对象,但是这里返回的是父类str的一个实例化对象

以及在实际项目中,什么时候需要用到,或者他有什么作用
答:绝大多数时候不需要写这个魔法方法,只有当父类是不可变类型,但又想改变它,比如父类是str为不可变类,我想将其对象自动变为全部大写,这里就满足上述条件,将可以重写该魔法方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-10 21:37:26 | 显示全部楼层
实际项目基本用不到魔法方法吧。
实在不理解最好跳过去。
这玩意好像用处不大。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-11 21:26:34 | 显示全部楼层
BngThea 发表于 2017-10-10 20:53
最后return中为何要返回父类的str.__new__(cls,word)?
答: 因为__new__方法要求要返回一个实例化的对象 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-14 01:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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