关于__new__方法
class CapString(str):def __new__(cls,string):
string=string.upper()
retrun str.__new__(cls,string)
小甲鱼例子中给了这个代码,说如此下来,类将返回全大写字符串。
但是问题是,如果我想要在类的后续引用str.__new__输出的数值应该怎么办? 本帖最后由 hrp 于 2021-6-15 12:35 编辑
CapString的实例就是str.__new__的返回值啊,在类中就是self。
class CapString(str):
def __new__(cls,string):
string=string.upper()
return str.__new__(cls, string)
def printstr(self):
print(f"类中self的值:{self}")
a = CapString("qwe")
print(f"CapString的实例a的值:{a}")
print(type(a))
a.printstr()
你这里重写 __new__ 后调用 str 类的 __new__ 方法返回就是返回 str 类的 __new__ 方法返回值
hrp 发表于 2021-6-15 12:23
CapString的实例就是str.__new__的返回值啊,在类中就是self。
__new__和__init__可以同时存在吗?
还是同样的例子,如果我写
def __init__(self):
self.string=self
赋值的时候就会提示
TypeError: __init__() takes 1 positional argument but 2 were given
那这时候怎么办? fc5igm 发表于 2021-6-15 13:05
__new__和__init__可以同时存在吗?
还是同样的例子,如果我写
把__init__的参数数量改成和__new__一样就可以了。
页:
[1]