2013-05-01 105 views
0

我试图了解使用dir函数时的几种方法。Python中的Dir函数

例如,当我执行以下命令时,它列出了以下方法。与__开头的方法是int对象内建的方法,但我怎么使用其他功能,如bit_lengthconjugate,在real情况下,我用它作为i.realbit_lenghth我用它作为i.bit_length()

如何识别时作为属性使用(真正的),当为方法调用(bit_length())使用方法:

>>> i=0 
>>> 
>>> dir(i) 
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delat 
tr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__forma 
t__', '__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__', '__ro 
r__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rx 
or__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '_ 
_truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', ' 
imag', 'numerator', 'real'] 
+0

通常通过读取文件;在任何情况下调用可能是方法的东西而不知道它应该做什么听起来都是个坏主意。 'help(i.bit_length)'或'help(i)'。 – geoffspear 2013-05-01 14:18:02

回答

1

您可以检查是否something是使用hasattr

hasattr(something, '__call__') 
功能
0

方法有__call__属性,所以为了确定是否可以调用某些东西,请使用:

hasattr(val, '__call__') 

问题是方法可以有参数,所以你必须检查参数列表(例如,使用类似Python list function argument names SO的问题)

5

方法属性。它们只是可调用的属性。

您可以测试,如果事情是可调用的使用内置callable() function

>>> 1 .bit_length 
<built-in method bit_length of int object at 0x7fe7b2c13118> 
>>> callable(1 .bit_length) 
True 
>>> callable(1 .real) 
False 
+0

我想你可能想提到类也可以调用,但调用类会导致构建类的实例。 :) – J0HN 2013-05-01 14:03:45

+0

+1,我不知道['callable()'](http://docs.python.org/2/library/functions.html#callable)。 Docs:*“如果类实例具有__call __()方法,则可以调用它们。”* – 2013-05-01 14:03:45

+1

@ J0HN:'int'也可以调用,所有'工厂'也一样。元类是可调用的,它们产生新的类等等。调用它们时产生返回一个新对象,但许多函数也是如此。 :-) – 2013-05-01 14:07:14