Python Shell 的方法列表?

12 投票
9 回答
15870 浏览
提问于 2025-04-15 14:04

你可能已经从我用的词语看出来,我是个Python新手。

我有个简单的问题:

在像Ruby那样的交互式Python环境中,我怎么能看到一个特定对象的方法列表?在Ruby的irb中,你可以在对象后面加上“.methods”来做到这一点。

9 个回答

6

这很简单,只需对你创建的任何对象这样做

dir(object)

它会返回这个对象的所有属性的列表。

10

dir( object )

这个命令会给你一个列表。

比如说:

a = 2
dir( a )

这个命令会列出你可以对一个整数使用的所有方法。

22

现有的回答很好地展示了如何获取一个对象的属性,但并没有准确回答你提出的问题——如何获取一个对象的方法。Python 对象有一个统一的命名空间(和 Ruby 不同,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 的第二个参数传入,以便根据你的具体需求定制结果。

撰写回答