Python Shell 的方法列表?
你可能已经从我用的词语看出来,我是个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
的第二个参数传入,以便根据你的具体需求定制结果。