好好学不玩手机 发表于 2020-3-7 17:58:22

第041讲动动手第2题疑问

代码是:
class Nint(int):
    def __new__(cls, arg=0):
      if isinstance(arg, str):
            total = 0
            for each in arg:
                total += ord(each)
            arg = total
      return int.__new__(cls, arg)

其中if isinstance(arg, str):这行代码我不明白有啥作用?感觉没有也可以运行。但发现去掉后
print(Nint(123))会报错,请问是咋回事呀?

zltzlt 发表于 2020-3-7 18:00:32

如果 arg 是字符串则执行以下代码

好好学不玩手机 发表于 2020-3-7 20:21:52

zltzlt 发表于 2020-3-7 18:00
如果 arg 是字符串则执行以下代码

那么加上这个判断语句后,如果我还是print(Nint(123))的话,应该也会报错呀,但是为什么又没出现这种情况?

zltzlt 发表于 2020-3-7 20:22:49

好好学不玩手机 发表于 2020-3-7 20:21
那么加上这个判断语句后,如果我还是print(Nint(123))的话,应该也会报错呀,但是为什么又没出现这种 ...

不会,如果你去掉那一句,那么默认执行 for each in arg 。由于整数不是可迭代对象,所以会报错。

加上那一句,只有当 arg 是字符串时才执行 for each in arg 。
页: [1]
查看完整版本: 第041讲动动手第2题疑问