张图南 发表于 2020-8-11 19:47:12

零基础PYTHON课后习题041 动动手2

我都程序运行后有bug,想知道怎么改能实现题目要求的功能

class Nint(int):
    def __new__(cls,x=0):
      self.x = x      
      Sum = 0

    try:   
       int(self.x)
       print(self.x)

    except ValueError :
      for each in self.x:
            Sum += ord(each)
      print(Sum)

qiuyouzhi 发表于 2020-8-11 19:50:36

改成这样:
class Nint(int):
    def __new__(cls, x):
      if type(x) == int:
            return x
      
      return sum(ord(each) for each in x)

print(Nint("FishC"))

张图南 发表于 2020-8-11 19:56:34

qiuyouzhi 发表于 2020-8-11 19:50
改成这样:

太强了,能说一下小甲鱼给的答案中的
def __new__(cls, arg=0):

return int.__new__(cls, arg)
是什么含义吗,看视频时一脸懵

qiuyouzhi 发表于 2020-8-11 20:06:48

本帖最后由 qiuyouzhi 于 2020-8-11 20:07 编辑

张图南 发表于 2020-8-11 19:56
太强了,能说一下小甲鱼给的答案中的
def __new__(cls, arg=0):



__new__的用法就是设置实例,举个栗子:
class A:
    def __new__(cls, a, b):
      return a + b

a = A(5, 3)
print(a)

结果就应该是8.

而return int.__new__(cls, arg)就相当于把实例设置为int(arg)

张图南 发表于 2020-8-11 20:21:34

qiuyouzhi 发表于 2020-8-11 20:06
__new__的用法就是设置实例,举个栗子:




理解深了一些,谢谢
页: [1]
查看完整版本: 零基础PYTHON课后习题041 动动手2