python __new__

作者: 青铜搬砖工 | 来源:发表于2018-04-12 13:03 被阅读0次

当类继承自一个像元组或者字符串这样不经常改变的类型的时候,我们可以用__new__方法来实现自己的类,但是一直困扰我的一点是为什么我在__new__里已经修改了传进来的参数,在__init__中还是原来的值,现在我想明白了,__new__传进来的参数最后变成了一个实例,而init里的参数是这个实例的一个属性,下面例子运行一下就很直观的显示出两者的不同。

# _*_ encoding:utf-8 _*_
class Word(str):


    def __new__(cls, word):
        # 注意,我们只能使用 __new__ ,因为str是不可变类型
        # 所以我们必须提前初始化它(在实例创建时)
        if ' ' in word:
            print "Value contains spaces. Truncating to first space."
            word = word[:word.index(' ')]
            # Word现在包含第一个空格前的所有字母
        return str.__new__(cls, word)#返回的是一个实例,这个word是实例的名称

    def __init__(self,word):#而这个word是实例的一个属性,即(实例)word.word(属性)的值
        self.word =word

temp = Word("1222 333")
print temp #输出1222
print(temp.word)#输出1222 333

https://zhuanlan.zhihu.com/p/26488074?refer=passer

相关文章

  • Python中的__new__和__init__的区别

    摘要 本文讨论了Python中__init__和__new__方法。 __new__和__init__具有不同的功...

  • Python中的__new__和__init__ 以及self理

    Python中的__new__和__init__ 写了这么多的class,现在才知道还有个__new__方法, 那...

  • python 中__init__与__new__的区别

    旧式和新式类中的__NEW__和__INIT__本文的目的是讨论Python的__new__和__init__方法...

  • Python魔法方法-__new__

    __new__ 使用类名()创建对象时,Python解释器首先会调用__new__ 方法为对象分配空间,__new...

  • python 的单例模式

    python设计模式中的 单例模式:单例模式可以通过__new__ 方法实现,而__new__ 方法一般用于继承不...

  • Python __new__方法的理解与使用

    1、方法介绍 先看下在python的官方文档中对__new__方法的介绍:https://docs.python....

  • python __new__

    当类继承自一个像元组或者字符串这样不经常改变的类型的时候,我们可以用__new__方法来实现自己的类,但是一直困扰...

  • Python单例

    Python单例 一般单例,利用内置函数def __new__(cls, *args, **kwargs)实现单例...

  • 类中内建函数

    Python的构造函数是__new__函数,不是__init____new__(cls)构造器:用于控制实例的生产...

  • Python札记40_黑魔法

    Python的类具有很多的特殊方法,__init__()、__new__()、__str__(),还有其他的一些特...

网友评论

    本文标题:python __new__

    本文链接:https://www.haomeiwen.com/subject/nhpxkftx.html