关于new方法 求看看
class CapStr(str):
def __new__(cls,string):
string=string.upper()
return str.__new__(cls,string)
a=CapStr('I love fishc')
这里的str.__new__(cls,string)为什么不是CapStr.__new__(cls,string),调用的不应该是capstr内的方法吗,还有就是str.__new__中的new方法是我定义的这个new方法还是另外只专属于str自身的new方法??有点绕 要是按你那样就陷入无限递归了耶
这里的str.__new__(cls,string)为什么不是CapStr.__new__(cls,string),调用的不应该是capstr内的方法吗
这里 str.__new__(cls,string) 是调用 str 的 __new__ 方法,而你 CapStr.__new__(cls,string) 是调用自身的 __new__
而你自身重写的__new__ 方法里面如果又再次调用CapStr.__new__(cls,string) 就会导致无限递归了
还有就是str.__new__中的new方法是我定义的这个new方法还是另外只专属于str自身的new方法??
str.__new__() 是调用 str 类中的 __new__ 方法,属于 str 类的
Twilight6 发表于 2020-8-18 20:52
这里 str.__new__(cls,string) 是调用 str 的 __new__ 方法,而你 CapStr.__new__(cls,string) 是 ...
也就是说str.__new__() 和CapStr.__new__ 两个new是不一样的方法是吧 只爱整活周淑怡 发表于 2020-8-18 21:37
也就是说str.__new__() 和CapStr.__new__ 两个new是不一样的方法是吧
是的
你str 的 __new__ 是之前写好自带的 __new__ 方法,有自己的功能, 而你的定义的 CapStr 类 继承了 str 类,那么也会继承 __new__ 方法
但是这里你重写了 __new__ 方法,所以此时将原先继承的 __new__ 方法给覆盖了 ,所以 __new__ 失去了原有的功能,但是你最后调用会 str 类的 __new__ 方法
那么此时你重写的 __new__ 方法又含有自己重写的代码,而且还有原来的__new__ 方法的功能 Twilight6 发表于 2020-8-18 21:41
是的
你str 的 __new__ 是之前写好自带的 __new__ 方法,有自己的功能, 而你的定义的 CapStr 类...
噢噢整明白了 谢谢谢谢
页:
[1]