落叶L 发表于 2022-5-9 15:37:10

为什么数字1没有__aad__方法

数字1赋值给变量,此变量有__add__方法,那么数字1为什么没有__add__方法呢。

Twilight6 发表于 2022-5-9 16:14:46



数值类型的都有 __add__ 等方法,像 1 就是 int 型,使用的就是 int 中的 __add__ 方法

wp231957 发表于 2022-5-9 16:38:58

1不是一个对象,对象才有方法

hrpzcf 发表于 2022-5-9 16:41:15

你怎么会觉得1没有add方法呢
Python 3.6.6 (qpyc:3.6.6, Jul 26 2018, 03:54:22) on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> dir(1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>>

wp231957 发表于 2022-5-9 16:48:11

hrpzcf 发表于 2022-5-9 16:41
你怎么会觉得1没有add方法呢

好吧1也是一个对象

Stubborn 发表于 2022-5-9 19:47:53

wp231957 发表于 2022-5-9 16:48
好吧1也是一个对象

python里面啥都是对象

临时号 发表于 2022-5-9 23:22:09

当你在控制台中输入help(1)时,你会发现1是由int类实例化出来的对象,当然具有__add__()方法
class int(object)
|int() -> integer
|int(x, base=10) -> integer
|
|Convert a number or string to an integer, or return 0 if no arguments
|are given.If x is a number, return x.__int__().For floating point
|numbers, this truncates towards zero.
|
|If x is not a number or if base is given, then x must be a string,
|bytes, or bytearray instance representing an integer literal in the
|given base.The literal can be preceded by '+' or '-' and be surrounded
|by whitespace.The base defaults to 10.Valid bases are 0 and 2-36.
|Base 0 means to interpret the base from the string as an integer literal.
|>>> int('0b100', base=0)
|4
|
|Methods defined here:
|
|__abs__(self, /)
|      abs(self)
|
|__add__(self, value, /)
|      Return self+value.

落叶L 发表于 2022-5-18 20:39:51

hrpzcf 发表于 2022-5-9 16:41
你怎么会觉得1没有add方法呢

因为1+a不是触发1的__add__而是触发a的__radd__,求解

落叶L 发表于 2022-5-18 20:49:17

本帖最后由 落叶L 于 2022-5-18 21:04 编辑

小甲鱼说+左边的没有__add__,才会触发右边的__radd__。为什么1+有__radd__的对象不是触发1的__add__而是触发右边对象的__radd__。所以我推测1没有__add__。

落叶L 发表于 2022-5-18 20:50:11

本帖最后由 落叶L 于 2022-5-18 21:05 编辑

hrpzcf 发表于 2022-5-9 16:41
你怎么会觉得1没有add方法呢

小甲鱼说+左边的没有__add__,才会触发右边的__radd__。为什么1+有__radd__的对象不是触发1的__add__而是触发右边对象的__radd__。所以我推测1没有__add__。

落叶L 发表于 2022-5-18 20:53:37

hrpzcf 发表于 2022-5-9 16:41
你怎么会觉得1没有add方法呢

小甲鱼说+左边的没有__add__,才会触发右边的__radd__。为什么1+有__radd__的对象不是触发1的__add__而是触发右边对象的__radd__。所以我推测1没有__add__。

落叶L 发表于 2022-5-18 20:54:57

小甲鱼说+左边的没有__add__,才会触发右边的__radd__。为什么1+有__radd__的对象不是触发1的__add__而是触发右边对象的__radd__。所以我推测1没有__add__。
页: [1]
查看完整版本: 为什么数字1没有__aad__方法