fc5igm 发表于 2021-6-15 12:10:15

关于__new__方法

class CapString(str):
    def __new__(cls,string):
      string=string.upper()
      retrun str.__new__(cls,string)
小甲鱼例子中给了这个代码,说如此下来,类将返回全大写字符串。
但是问题是,如果我想要在类的后续引用str.__new__输出的数值应该怎么办?

hrp 发表于 2021-6-15 12:23:41

本帖最后由 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()

Twilight6 发表于 2021-6-15 12:28:35


你这里重写 __new__ 后调用 str 类的 __new__ 方法返回就是返回 str 类的 __new__ 方法返回值

fc5igm 发表于 2021-6-15 13:05:16

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
那这时候怎么办?

hrpzcf 发表于 2021-6-15 13:28:16

fc5igm 发表于 2021-6-15 13:05
__new__和__init__可以同时存在吗?
还是同样的例子,如果我写



把__init__的参数数量改成和__new__一样就可以了。
页: [1]
查看完整版本: 关于__new__方法