鱼C论坛

 找回密码
 立即注册
查看: 3195|回复: 4

[已解决]类和对象问题

[复制链接]
发表于 2022-12-30 17:01:12 | 显示全部楼层 |阅读模式

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

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

x
1、class capstr(str):
    def __new__(cls,string):
        string=string.upper()
        return super().__new__(cls,string)
2、class capstr(str):
    def __new__(cls,string):
        string=string.upper()
        return string
cap=capstr("fishc")
cap.lower
这两种方法都能实现下面的操作,第一种(视频给出的)的返回值super().__new__(cls,string)有什么作用吗?
最佳答案
2022-12-30 23:57:26
第一种的返回值return super().__new__(cls,string),能够让你在实例化对象的时候得到一个类的实例化对象
第二种的返回值return string 虽然能得到一样的结果,但是返回的是string, 所以类型就变成了 str 类 ,并不是 capstr 类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-30 23:57:26 | 显示全部楼层    本楼为最佳答案   
第一种的返回值return super().__new__(cls,string),能够让你在实例化对象的时候得到一个类的实例化对象
第二种的返回值return string 虽然能得到一样的结果,但是返回的是string, 所以类型就变成了 str 类 ,并不是 capstr 类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 09:03:00 | 显示全部楼层
lxping 发表于 2022-12-30 23:57
第一种的返回值return super().__new__(cls,string),能够让你在实例化对象的时候得到一个类的实例化对象
...

super()的作用不就是调用capstr的未绑定父类str吗,如果是这样的话不就和第二种的返回值的类型一样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 09:58:33 | 显示全部楼层
wangye666 发表于 2022-12-31 09:03
super()的作用不就是调用capstr的未绑定父类str吗,如果是这样的话不就和第二种的返回值的类型一样吗?

你可以用type()函数对返回值的类型做一下比较
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 20:07:39 | 显示全部楼层
一样的。 只是第一种更规范、更实际些(涉及继承,一般都会用到super )。      
因为capstr继承了str类,super().__new__(cls,string) 即相当于 str.__new__(cls, string)  即 str(string) 如 str( 'alice'.upper() )  --> 'ALICE'   
要理解的是 str(x) 包括 str的 __new__(cls, ...) 和  __init__(self, ...) , 是先 __new__ 生成和返回一个实例self,然后给到 __init__ 进行绑定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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