小甲鱼第43课的课后作业
答案代码如下:class Word(str):
def__new__(cls,word):
if ' 'in word:
print'Value contains spaces.Truncating to the first spacd.'
word=word[:word.index(' ')]
return str.__new__(cls,word)
这里对 return str.__new__(cls,word)不是很理解,
为什么返回值给到了基类的__new__(cls,word)呢
基类的__new__本来应该是默认的objest的函数吧
我知道__new__是创建一个实例对象用到的函数
求大佬能说下,这里的返回给基类是什么道理呢
感谢感谢 return str.__new__(cls,word)
这里是让父类的 __new__ 去处理 word。如果直接 return word,类型是不一样的。
>>> class Word(str):
def __new__(cls, word):
return str.__new__(cls, word)
>>> type(Word('Python'))
<class '__main__.Word'>
>>> class Word(str):
def __new__(cls, word):
return word
>>> type(Word('Python'))
<class 'str'> zltzlt 发表于 2020-2-13 17:34
这里是让父类的 __new__ 去处理 word。如果直接 return word,类型是不一样的。
我的理解是处理好后的对象再传递给这个子类的init?
怎么回到这个子类呢。。。不是交给父类的new去创建了吗 stone_qaq 发表于 2020-2-13 18:57
我的理解是处理好后的对象再传递给这个子类的init?
怎么回到这个子类呢。。。不是交给父类的new去创建了 ...
它会自动执行子类的 __init__() 。
>>> class A(str):
def __init__(self, word):
print("__init__()")
super().__init__()
def __new__(cls, word):
return str.__new__(cls, word)
>>> a = A('a')
__init__() zltzlt 发表于 2020-2-13 19:00
它会自动执行子类的 __init__() 。
class A(str):
def __new__(cls, word):
return str.__new__(cls, word)
def __init__(self, word):
print("__init__()")
super().__init__()
SyntaxError: inconsistent use of tabs and spaces in indentation
为啥会报缩进的错呢。。。我也检查了没问题呀 把缩进前面的空格删掉就好了
zltzlt 发表于 2020-2-13 17:34
这里是让父类的 __new__ 去处理 word。如果直接 return word,类型是不一样的。
噢,原来new处理过后类型不一样!
页:
[1]