鱼C论坛

 找回密码
 立即注册
查看: 2025|回复: 4

关于类和魔法方法的疑问

[复制链接]
发表于 2017-4-4 22:39:42 | 显示全部楼层 |阅读模式

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

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

x
问题1:
我先改写了int类
  1. >>> class int(int):
  2.         def __add__(self, other):
  3.                 return self - other
复制代码

实例化类,并相加,得到预期的结果
  1. >>> a = int(5)
  2. >>> b = int(7)
  3. >>> a + b
  4. -2
复制代码

我一直以为c = 12就是相当于c = int(12),所以直接赋值,但结果却……
  1. >>> c =12
  2. >>> d =7
  3. >>> c+d
  4. 19
复制代码

我又仔细查看了类型,的确不一样
  1. >>> type(a)
  2. <class '__main__.int'>
  3. >>> type(c)
  4. <class 'int'>
复制代码


c = 12到底是不是实例化一个对象?它的机制到底是什么?

问题2:
加法对应的就是魔法方法__add__
如下操作是可以的
  1. >>> a = 3
  2. >>> a.__add__(5)
  3. 8
复制代码

而这样就不行
  1. >>> 3.__add__(5)
  2. SyntaxError: invalid syntax
复制代码

但加上括号就行了
  1. >>> (3).__add__(5)
  2. 8
复制代码

为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-4 22:48:07 | 显示全部楼层
本帖最后由 SixPy 于 2017-4-4 22:50 编辑

3.0 中的 . 算什么呢?

3.__add__(5)

. 后面的__add__不符合浮点数的语法格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-4 22:51:41 | 显示全部楼层
SixPy 发表于 2017-4-4 22:48
3.0 中的 . 算什么呢?

你是说,3.__add__(5)中的小数点计算机无法判断是数字的小数点还是方法的前缀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-4 22:57:30 | 显示全部楼层
冬雪雪冬 发表于 2017-4-4 22:51
你是说,3.__add__(5)中的小数点计算机无法判断是数字的小数点还是方法的前缀?

数字开头的字面量只能是数值常量

变量标识符不能以数字开头
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-4 22:58:28 | 显示全部楼层
SixPy 发表于 2017-4-4 22:57
数字开头的字面量只能是数值常量

变量标识符不能以数字开头

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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