zhe512 发表于 2021-7-9 10:41:10

第41讲的魔法方法

定义一个类继承于 int 类型,并实现一个特殊功能:当传入的参数是字符串的时候,返回该字符串中所有字符的 ASCII 码的和(使用 ord() 获得一个字符的 ASCII 码值)

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)


请大神解答两个问题。
1. 为什么定义new的时候arg=0,我不写等于0也能出答案
2.ord()里面数字是什么原理实现直接出数字的,在附件中,我直接在idle里ord(4)就不行

Twilight6 发表于 2021-7-9 11:08:02


1. 为什么定义new的时候arg=0,我不写等于0也能出答案

这是定义过程中设置参数的默认值,arg = 0 就是设置默认值为0,这样就可以在调用过程中不用必须进行 arg 参数的赋值操作

例如因为设置了 arg 的默认值,你这里可以直接这样调用: Nint() 不填参数,这样调用等价于 : Nint(0) 或 Nint(arg = 0)

2.ord()里面数字是什么原理实现直接出数字的,在附件中,我直接在idle里ord(4)就不行

ord 函数内填的是长度为 1 的字符串,不是整型,返回的是 ASCII 码值 或 Unicode 数值。

>>> ord('3')
51

页: [1]
查看完整版本: 第41讲的魔法方法