鱼C论坛

 找回密码
 立即注册
查看: 2702|回复: 6

请问__new__方法是什么时候用到啊?我看什么不可变类型的时候用,可是看了半天还是...

[复制链接]
发表于 2016-10-26 19:50:43 | 显示全部楼层 |阅读模式
3鱼币
class Word(str):
'''存储单词的类,定义比较单词的几种方法'''

    def __new__(cls, word):
        # 注意我们必须要用到 __new__ 方法,因为 str 是不可变类型
        # 所以我们必须在创建的时候将它初始化
        if ' ' in word:
            print "Value contains spaces. Truncating to first space."
            word = word[:word.index(' ')] #单词是第一个空格之前的所有字符
        return str.__new__(cls, word)

例如该类中为啥必须要用到__new__方法啊?求《《详细》》讲解一下啊?谢谢啦!

最佳答案

查看完整内容

一般很少用__new__, 不可变类型一旦定义就不会被更改: 我们创建一个这样的类, 继承自str,并且使用__init__在其创建时我们将它自身变成 'fishc' __init__没有效果。 但是这样呢。 __new__要比__init__先执行,不管写的时候顺序如何。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-26 19:50:44 | 显示全部楼层
本帖最后由 wei_Y 于 2016-10-27 20:22 编辑

一般很少用__new__,
不可变类型一旦定义就不会被更改:
我们创建一个这样的类,
继承自str,并且使用__init__在其创建时我们将它自身变成 'fishc'
  1. class a(str):

  2.     def __init__(self, x):
  3.         str.__init__('fishc')
复制代码
  1. b = a('xxx')
  2. print(b)
复制代码


__init__没有效果。
  1. xxx

  2. ***Repl Closed***
复制代码


但是这样呢。
  1. class a(str):

  2.     def __new__(cls, x):
  3.         return str.__new__(cls, 'fishc')
复制代码

  1. b = a('xxx')
  2. print(b)
复制代码
  1. fishc

  2. ***Repl Closed***
复制代码


__new__要比__init__先执行,不管写的时候顺序如何。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-27 10:25:46 | 显示全部楼层
你知道 __new__() 方法的作用吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-27 18:21:39 | 显示全部楼层
hldh214 发表于 2016-10-27 10:25
你知道 __new__() 方法的作用吗

__new__方法是类实例化时调用的第一个方法,第一个参数指向类,后面的参数会直接赋给__init__方法。

我只知道这些,关键是不太理解那个(不可变类型),为啥要用new方法。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-27 21:15:55 | 显示全部楼层
wei_Y 发表于 2016-10-27 20:19
一般很少用__new__,
不可变类型一旦定义就不会被更改:
我们创建一个这样的类,

差不多懂了。Thank you very much!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-27 21:16:54 | 显示全部楼层
wei_Y 发表于 2016-10-27 20:19
一般很少用__new__,
不可变类型一旦定义就不会被更改:
我们创建一个这样的类,

......十分感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-28 08:47:21 | 显示全部楼层
学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-2 02:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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