dir函数在python中提供了哪些类型的属性?

What types of attributes does the the dir function give in python?

我在某个地方读到,python中的所有内容都是一个对象。我想,2号怎么样?如果我在python解释器中键入"dir(2)",将得到以下输出:

dir(2)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']

< /块引用>< /块引用>

显然,数字2是一个具有这些属性的对象。我得到了数个属性的名称,比如uuu-add_uuu和covergent。但是如果我尝试2.convertive(),我会得到一个错误

2、共轭()语法错误:无效语法

然而,dir(2j)作为一种方法具有共轭性,当我使用方法共轭时不会得到错误。

2J.共轭()-2J

2、共轭()二

也不会给我任何问题。

更奇怪的是,2。uuu add_uu()和2。uu add_uuu给出了一个错误,尽管它是2的属性。我认为加法指的是+运算。那么,为什么它在属性列表中显示为"添加",而不是显示为+?dir(2)是变量列表和方法列表,还是列出其他内容?什么是事物和事物的区别?什么时候可以用常规的方法调用一个方法,比如object.method(),什么时候你必须做一些奇怪的事情,比如2+2而不是2.add(2)?


conjugateint的一种方法,可以应用于int对象。

为了演示所有这些工作:

1
2
3
x = 2; x.conjugate()
(2).conjugate()
2 .conjugate()  # note the whitespace

由于python解析器具有特殊的数字文本处理功能,因此不允许使用这种笨拙的语法:

1
 2.conjugate()

正如@ignacio所解释的,这是因为解析器看到2.并将其视为一个浮点,即像(2.)conjugate()一样,这不是一个有效的语法。

但是,除了将其与此语法一起使用之外,还允许进行上述操作。

对于__add__方法,__add__方法允许类型定义/重写+操作器如何应用于它们。当您执行a+b时,解释器调用a.__add__(b)b.__add__(a)(机制比这更复杂)。

一般来说,你不应该直接打电话给__add__


解析器看到"."并认为应该有一个浮点。

1
2
>>> (2).conjugate
<built-in method conjugate of int object at 0x2242140>

其余的:

python语言参考,数据模型部分