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)