你已经通过术语的使用发现我是一个python n00b.
直截了当的问题:
我怎样才能在交互式python shell中看到特定对象的方法列表,就像我可以在ruby中一样(你可以在ruby irb中用对象后面的'.methods'来做到这一点)?
现有的答案可以很好地向您展示如何获取对象的属性,但不能准确回答您提出的问题 - 如何获取对象的METHODS.Python对象具有统一的命名空间(与Ruby不同,其中方法和属性使用不同的命名空间).考虑例如:
>>> class X(object): ... @classmethod ... def clame(cls): pass ... @staticmethod ... def stame(): pass ... def meth(self): pass ... def __init__(self): ... self.lam = lambda: None ... self.val = 23 ... >>> x = X() >>> dir(x) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'clame', 'lam', 'meth', 'stame', 'val']
((输出拆分以便于阅读)).
正如你看到的,这是给你的所有属性的名称-其中包括大量的特殊的方法,这些方法只是从继承object
,特殊的数据属性,如__class__
,__dict__
和__doc__
,每个实例的数据属性(val
),按实例可执行属性(lam
)以及实际的方法.
如果您需要更具选择性,请尝试:
>>> import inspect >>> [n for n, v in inspect.getmembers(x, inspect.ismethod)] ['__init__', 'clame', 'meth']
标准库模块inspect
是在Python中进行内省的最佳方式:它构建在内置的内省钩子(例如dir
更高级的内置钩子)之上,为您提供有用,丰富和简单的内省服务.例如,在这里,您看到只显示了由此类专门设计的实例和类方法 - 不是静态方法,不是可调用或不可调用的实例属性,而不是从中继承的特殊方法object
.如果您的选择性需求略有不同,则可以轻松构建自己的调整版本ismethod
并将其作为第二个参数传递getmembers
,以根据您的精确,精确需求定制结果.
dir( object )
会给你清单.
例如:
a = 2 dir( a )
将列出您可以调用整数的所有方法.
>>> help(my_object)
对于您创建的任何对象,它都很简单
dir(object)
它将返回对象的所有属性的列表.