W1ND123 发表于 2021-11-7 16:12:20

关于__new__参数的问题

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:if instance(arg,str)这个语句是判断arg和str什么关系呢

hrpzcf 发表于 2021-11-7 17:13:22

判断arg是否是str(字符串)类型的值

W1ND123 发表于 2021-11-8 10:33:05

hrpzcf 发表于 2021-11-7 17:13
判断arg是否是str(字符串)类型的值

这里的arg属于对象是吗

W1ND123 发表于 2021-11-8 10:38:50

hrpzcf 发表于 2021-11-7 17:13
判断arg是否是str(字符串)类型的值

2)isinstance(object, classinfo)
如果第一个参数(object)是第二个参数(classinfo)的实例对象,
则返回True,否则返回False。

也就是说arg是str的实例对象吗
所以说其实这里是有一样看不见的实例化操作吧 就像这样 arg = str(arg)

hrpzcf 发表于 2021-11-8 10:41:08

本帖最后由 hrpzcf 于 2021-11-8 10:42 编辑

W1ND123 发表于 2021-11-8 10:33
这里的arg属于对象是吗

对,arg可以是任何对象
from typing import Callable


def f():
    pass


arg0 = 0
arg1 =
arg2 = {0: 0}
arg3 = lambda: 0
arg4 = f
arg5 = "5"

print(isinstance(arg0, int))# True
print(isinstance(arg0, str))# False

print(isinstance(arg1, list))# True

print(isinstance(arg2, dict))# True

print(isinstance(arg3, Callable))# True

print(isinstance(arg4, Callable))# True

print(isinstance(arg5, str))# True

W1ND123 发表于 2021-11-8 10:42:47

hrpzcf 发表于 2021-11-8 10:41
对,arg可以是任何对象

感谢帮助,谢谢~

hrpzcf 发表于 2021-11-8 10:46:18

本帖最后由 hrpzcf 于 2021-11-8 10:51 编辑

W1ND123 发表于 2021-11-8 10:38
2)isinstance(object, classinfo)
如果第一个参数(object)是第二个参数(classinfo)的实例对象,
...

不是看不见的实例化操作,是arg本身就是某类的实例,比如isinstance("x", str), "x"本身就是str的实例

另外这种清空也会返回True:
class a:
    pass


class b(a): # b继承了a
    pass


x = b()
print(isinstance(x, a))# 判断x是否a的实例,一样会返回True

W1ND123 发表于 2021-11-8 11:07:26

hrpzcf 发表于 2021-11-8 10:46
不是看不见的实例化操作,是arg本身就是某类的实例,比如isinstance("x", str), "x"本身就是str的实例 ...

明白了!感谢回答!
另外这个应该是输入快打错了吧,class a应该大写是吗

hrpzcf 发表于 2021-11-8 11:13:46

W1ND123 发表于 2021-11-8 11:07
明白了!感谢回答!
另外这个应该是输入快打错了吧,class a应该大写是吗

类名使用驼峰命名规则是一个规范,不是强制性的

W1ND123 发表于 2021-11-8 11:22:07

hrpzcf 发表于 2021-11-8 11:13
类名使用驼峰命名规则是一个规范,不是强制性的

知道了,谢谢~
页: [1]
查看完整版本: 关于__new__参数的问题