鱼C论坛

 找回密码
 立即注册
查看: 1289|回复: 2

求助个__new__构造方法的问题

[复制链接]
发表于 2019-8-11 19:32:56 | 显示全部楼层 |阅读模式

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

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

x
  1. class Word(str):

  2.     def __new__(cls,arg):
  3.         if arg.find(' ') != -1:
  4.             arg = arg.partition(' ')[0]
  5.         return super().__new__(cls,arg)

  6.     def __init__(self,arg):
  7.         self.lenght = len(self)
  8.        
  9.         .......
复制代码


第43讲课后题2中,对于类的定义通过重写__new__来处理这我理解,但是__init__方法中如果我把self.lenght赋值为len(arg),为什么得到的还是__new__方法处理前的那个arg的长度呢?
之前看魔法方法总结有这么一句:
2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法
结合上面的代码,new方法里那个arg应该是处理过后的值,那么init不是应该接受这个值吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-12 13:06:13 | 显示全部楼层
从这节开始,我直接跳了10节,开始上手爬虫啦,不然我也能帮到你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-12 13:28:19 | 显示全部楼层
geen 发表于 2019-8-12 13:06
从这节开始,我直接跳了10节,开始上手爬虫啦,不然我也能帮到你

话说这个问题我发现自己理解错了的,init接收的参数应该是第一个new里的那个arg,不是基类调用的那个。由于arg是个不可变对象(字符串类型),所以init里那个长度就是不变的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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