鱼C论坛

 找回密码
 立即注册
查看: 1597|回复: 9

[已解决]关于__new__参数的问题

[复制链接]
发表于 2021-11-7 16:12:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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什么关系呢
最佳答案
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 = [0]
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 17:13:22 From FishC Mobile | 显示全部楼层
判断arg是否是str(字符串)类型的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-8 10:33:05 | 显示全部楼层
hrpzcf 发表于 2021-11-7 17:13
判断arg是否是str(字符串)类型的值

这里的arg属于对象是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 = [0]
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-8 10:42:47 | 显示全部楼层
hrpzcf 发表于 2021-11-8 10:41
对,arg可以是任何对象

感谢帮助,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-8 11:07:26 | 显示全部楼层
hrpzcf 发表于 2021-11-8 10:46
不是看不见的实例化操作,是arg本身就是某类的实例,比如isinstance("x", str), "x"本身就是str的实例 ...

明白了!感谢回答!
另外这个应该是输入快打错了吧,class a应该大写是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

类名使用驼峰命名规则是一个规范,不是强制性的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-8 11:22:07 | 显示全部楼层
hrpzcf 发表于 2021-11-8 11:13
类名使用驼峰命名规则是一个规范,不是强制性的

知道了,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表