类和对象问题
1、class capstr(str):def __new__(cls,string):
string=string.upper()
return super().__new__(cls,string)
2、class capstr(str):
def __new__(cls,string):
string=string.upper()
return string
cap=capstr("fishc")
cap.lower
这两种方法都能实现下面的操作,第一种(视频给出的)的返回值super().__new__(cls,string)有什么作用吗? 第一种的返回值return super().__new__(cls,string),能够让你在实例化对象的时候得到一个类的实例化对象
第二种的返回值return string 虽然能得到一样的结果,但是返回的是string, 所以类型就变成了 str 类 ,并不是 capstr 类 lxping 发表于 2022-12-30 23:57
第一种的返回值return super().__new__(cls,string),能够让你在实例化对象的时候得到一个类的实例化对象
...
super()的作用不就是调用capstr的未绑定父类str吗,如果是这样的话不就和第二种的返回值的类型一样吗? wangye666 发表于 2022-12-31 09:03
super()的作用不就是调用capstr的未绑定父类str吗,如果是这样的话不就和第二种的返回值的类型一样吗?
你可以用type()函数对返回值的类型做一下比较 一样的。 只是第一种更规范、更实际些(涉及继承,一般都会用到super )。
因为capstr继承了str类,super().__new__(cls,string) 即相当于 str.__new__(cls, string)即 str(string) 如 str( 'alice'.upper() )--> 'ALICE'
要理解的是 str(x) 包括 str的 __new__(cls, ...) 和__init__(self, ...) , 是先 __new__ 生成和返回一个实例self,然后给到 __init__ 进行绑定。
页:
[1]