python __new__

当类继承自一个像元组或者字符串这样不经常改变的类型的时候,我们可以用__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__)