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__

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