python shell的方法列表?

pot*_*lee 12 python shell interactive

你已经通过术语的使用发现我是一个python n00b.

直截了当的问题:

我怎样才能在交互式python shell中看到特定对象的方法列表,就像我可以在ruby中一样(你可以在ruby irb中用对象后面的'.methods'来做到这一点)?

Ale*_*lli 20

现有的答案可以很好地向您展示如何获取对象的属性,但不能准确回答您提出的问题 - 如何获取对象的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']
Run Code Online (Sandbox Code Playgroud)

((输出拆分以便于阅读)).

正如你看到的,这是给你的所有属性的名称-其中包括大量的特殊的方法,这些方法只是从继承object,特殊的数据属性,如__class__,__dict____doc__,每个实例的数据属性(val),按实例可执行属性(lam)以及实际的方法.

如果您需要更具选择性,请尝试:

>>> import inspect
>>> [n for n, v in inspect.getmembers(x, inspect.ismethod)]
['__init__', 'clame', 'meth']
Run Code Online (Sandbox Code Playgroud)

标准库模块inspect是在Python中进行内省的最佳方式:它构建在内置的内省钩子(例如dir更高级的内置钩子)之上,为您提供有用,丰富和简单的内省服务.例如,在这里,您看到只显示了由此类专门设计的实例和类方法 - 不是静态方法,不是可调用或不可调用的实例属性,而不是从中继承的特殊方法object.如果您的选择性需求略有不同,则可以轻松构建自己的调整版本ismethod并将其作为第二个参数传递getmembers,以根据您的精确,精确需求定制结果.


Jon*_*n W 10

dir( object )

会给你清单.

例如:

a = 2
dir( a )
Run Code Online (Sandbox Code Playgroud)

将列出您可以调用整数的所有方法.


小智 5

>>> help(my_object)
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是不正确的。help用于显示方法的文档字符串文档。例如help(string.upper)。dir(obj)是必需的。 (2认同)

hj-*_*007 5

对于您创建的任何对象,它都很简单

dir(object)
Run Code Online (Sandbox Code Playgroud)

它将返回对象的所有属性的列表.