回答
您可以使用dir
得到一個列表中的任何對象的方法。這是非常有用的交互式提示:
>>> dir(l1)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__',
'__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__',
'__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__',
'__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
有趣的方法通常是那些沒有開始用下劃線您可以編寫自己的目錄版本,如果你想忽略開始用下劃線名稱:
>>> mydir = lambda a:[x for x in dir(a) if not x.startswith('_')]
>>> mydir([])
['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
如果安裝IPython,那麼你可以這樣做:
% ipython
Python 2.6.4 (r264:75706, Nov 2 2009, 14:38:03)
Type "copyright", "credits" or "license" for more information.
IPython 0.10 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: l1=[1,5,7]
In [2]: l1.
l1.__add__ l1.__getslice__ l1.__new__ l1.append
l1.__class__ l1.__gt__ l1.__reduce__ l1.count
l1.__contains__ l1.__hash__ l1.__reduce_ex__ l1.extend
l1.__delattr__ l1.__iadd__ l1.__repr__ l1.index
l1.__delitem__ l1.__imul__ l1.__reversed__ l1.insert
l1.__delslice__ l1.__init__ l1.__rmul__ l1.pop
l1.__doc__ l1.__iter__ l1.__setattr__ l1.remove
l1.__eq__ l1.__le__ l1.__setitem__ l1.reverse
l1.__format__ l1.__len__ l1.__setslice__ l1.sort
l1.__ge__ l1.__lt__ l1.__sizeof__
l1.__getattribute__ l1.__mul__ l1.__str__
l1.__getitem__ l1.__ne__ l1.__subclasshook__
In [2]: l1.
就上線,你鍵入對象名稱,一段時間,然後按TAB。 IPython然後列出對象的所有屬性。
我發現IPython是探索對象屬性的寶貴工具。它比標準的Python交互式提示使用起來要方便得多。在其他時髦的東西,把問號的對象後,給你的文檔字符串:
In [6]: d.update?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in method update of dict object at 0xa3c024c>
Namespace: Interactive
Docstring:
D.update(E, **F) -> None. Update D from dict/iterable E and F.
If E has a .keys() method, does: for k in E: D[k] = E[k]
If E lacks .keys() method, does: for (k, v) in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
而且,如果可用,兩個問號給你它的源代碼:
In [18]: np.sum??
Type: function
Base Class: <type 'function'>
String Form: <function sum at 0x9c501ec>
Namespace: Interactive
File: /usr/lib/python2.6/dist-packages/numpy/core/fromnumeric.py
Definition: np.sum(a, axis=None, dtype=None, out=None)
Source:
def sum(a, axis=None, dtype=None, out=None):
...
if isinstance(a, _gentype):
res = _sum_(a)
if out is not None:
out[...] = res
return out
return res
try:
sum = a.sum
except AttributeError:
return _wrapit(a, 'sum', axis, dtype, out)
return sum(axis, dtype, out)
碰巧,列表實例的所有成員都是方法。如果不是這樣的話,你可以這樣做:
l1 = [1, 5 , 7]
print [name for name in dir(l1) if type(getattr(l1, name) == type(l1.append))]
這將排除成員是不是方法。
或'如果callable(getattr(l1,name))' – 2009-12-13 23:51:41
@piquadrat:是的,很好。 – RichieHindle 2009-12-14 08:24:55
你可能想看看getmembers
功能inspect
模塊
In [1]: import inspect
In [2]: inspect?
Type: module
Base Class: <type 'module'>
String Form: <module 'inspect' from '/usr/lib/python2.6/inspect.pyc'>
Namespace: Interactive
File: /usr/lib/python2.6/inspect.py
Docstring:
Get useful information from live Python objects.
This module encapsulates the interface provided by the internal special
attributes (func_*, co_*, im_*, tb_*, etc.) in a friendlier fashion.
It also provides some help for examining source code and class layout.
Here are some of the useful functions provided by this module:
ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(),
isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(),
isroutine() - check object types
getmembers() - get members of an object that satisfy a given condition
getfile(), getsourcefile(), getsource() - find an object's source code
getdoc(), getcomments() - get documentation on an object
getmodule() - determine the module that an object came from
getclasstree() - arrange classes so as to represent their hierarchy
getargspec(), getargvalues() - get info about function arguments
formatargspec(), formatargvalues() - format an argument spec
getouterframes(), getinnerframes() - get info about frames
currentframe() - get the current stack frame
stack(), trace() - get info about frames on the stack or in a traceback
In [3]: l1=[1,5,7]
In [4]: inspect.getmembers(l1)
Out[4]:
[('__add__', <method-wrapper '__add__' of list object at 0xa38716c>),
('__class__', <type 'list'>),
('__contains__', <method-wrapper '__contains__' of list object at 0xa38716c>),
('__delattr__', <method-wrapper '__delattr__' of list object at 0xa38716c>),
('__delitem__', <method-wrapper '__delitem__' of list object at 0xa38716c>),
('__delslice__', <method-wrapper '__delslice__' of list object at 0xa38716c>),
('__doc__',
"list() -> new list\nlist(sequence) -> new list initialized from sequence's items"),
('__eq__', <method-wrapper '__eq__' of list object at 0xa38716c>),
('__format__', <built-in method __format__ of list object at 0xa38716c>),
('__ge__', <method-wrapper '__ge__' of list object at 0xa38716c>),
('__getattribute__',
<method-wrapper '__getattribute__' of list object at 0xa38716c>),
('__getitem__', <built-in method __getitem__ of list object at 0xa38716c>),
('__getslice__', <method-wrapper '__getslice__' of list object at 0xa38716c>),
('__gt__', <method-wrapper '__gt__' of list object at 0xa38716c>),
('__hash__', None),
('__iadd__', <method-wrapper '__iadd__' of list object at 0xa38716c>),
('__imul__', <method-wrapper '__imul__' of list object at 0xa38716c>),
('__init__', <method-wrapper '__init__' of list object at 0xa38716c>),
('__iter__', <method-wrapper '__iter__' of list object at 0xa38716c>),
('__le__', <method-wrapper '__le__' of list object at 0xa38716c>),
('__len__', <method-wrapper '__len__' of list object at 0xa38716c>),
('__lt__', <method-wrapper '__lt__' of list object at 0xa38716c>),
('__mul__', <method-wrapper '__mul__' of list object at 0xa38716c>),
('__ne__', <method-wrapper '__ne__' of list object at 0xa38716c>),
('__new__', <built-in method __new__ of type object at 0x822be40>),
('__reduce__', <built-in method __reduce__ of list object at 0xa38716c>),
('__reduce_ex__',
<built-in method __reduce_ex__ of list object at 0xa38716c>),
('__repr__', <method-wrapper '__repr__' of list object at 0xa38716c>),
('__reversed__', <built-in method __reversed__ of list object at 0xa38716c>),
('__rmul__', <method-wrapper '__rmul__' of list object at 0xa38716c>),
('__setattr__', <method-wrapper '__setattr__' of list object at 0xa38716c>),
('__setitem__', <method-wrapper '__setitem__' of list object at 0xa38716c>),
('__setslice__', <method-wrapper '__setslice__' of list object at 0xa38716c>),
('__sizeof__', <built-in method __sizeof__ of list object at 0xa38716c>),
('__str__', <method-wrapper '__str__' of list object at 0xa38716c>),
('__subclasshook__',
<built-in method __subclasshook__ of type object at 0x822be40>),
('append', <built-in method append of list object at 0xa38716c>),
('count', <built-in method count of list object at 0xa38716c>),
('extend', <built-in method extend of list object at 0xa38716c>),
('index', <built-in method index of list object at 0xa38716c>),
('insert', <built-in method insert of list object at 0xa38716c>),
('pop', <built-in method pop of list object at 0xa38716c>),
('remove', <built-in method remove of list object at 0xa38716c>),
('reverse', <built-in method reverse of list object at 0xa38716c>),
('sort', <built-in method sort of list object at 0xa38716c>)]
互動Python有一個help
功能,您可以與任何使用:
>>> help(list)
Help on class list in module __builtin__:
class list(object)
| list() -> new list
| list(sequence) -> new list initialized from sequence´s items
|
| Methods defined here:
|
| __add__(...)
| x.__add__(y) <==> x+y
|
| __contains__(...)
| x.__contains__(y) <==> y in x
|
| __delitem__(...)
| x.__delitem__(y) <==> del x[y]
|
| __delslice__(...)
| x.__delslice__(i, j) <==> del x[i:j]
|
| Use of negative indices is not supported.
|
| __eq__(...)
| x.__eq__(y) <==> x==y
|
| __ge__(...)
| x.__ge__(y) <==> x>=y
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __getitem__(...)
| x.__getitem__(y) <==> x[y]
|
| __getslice__(...)
| x.__getslice__(i, j) <==> x[i:j]
|
| Use of negative indices is not supported.
|
| __gt__(...)
| x.__gt__(y) <==> x>y
|
| __iadd__(...)
| x.__iadd__(y) <==> x+=y
|
| __imul__(...)
| x.__imul__(y) <==> x*=y
|
| __init__(...)
| x.__init__(...) initializes x; see x.__class__.__doc__ for signature
|
| __iter__(...)
| x.__iter__() <==> iter(x)
|
| __le__(...)
| x.__le__(y) <==> x<=y
|
| __len__(...)
| x.__len__() <==> len(x)
|
| __lt__(...)
| x.__lt__(y) <==> x<y
|
| __mul__(...)
| x.__mul__(n) <==> x*n
|
| __ne__(...)
| x.__ne__(y) <==> x!=y
|
| __repr__(...)
| x.__repr__() <==> repr(x)
|
| __reversed__(...)
| L.__reversed__() -- return a reverse iterator over the list
|
| __rmul__(...)
| x.__rmul__(n) <==> n*x
|
| __setitem__(...)
| x.__setitem__(i, y) <==> x[i]=y
|
| __setslice__(...)
| x.__setslice__(i, j, y) <==> x[i:j]=y
|
| Use of negative indices is not supported.
|
| __sizeof__(...)
| L.__sizeof__() -- size of L in memory, in bytes
|
| append(...)
| L.append(object) -- append object to end
|
| count(...)
| L.count(value) -> integer -- return number of occurrences of value
|
| extend(...)
| L.extend(iterable) -- extend list by appending elements from the iterable
|
| index(...)
| L.index(value, [start, [stop]]) -> integer -- return first index of value.
| Raises ValueError if the value is not present.
|
| insert(...)
| L.insert(index, object) -- insert object before index
|
| pop(...)
| L.pop([index]) -> item -- remove and return item at index (default last).
| Raises IndexError if list is empty or index is out of range.
|
| remove(...)
| L.remove(value) -- remove first occurrence of value.
| Raises ValueError if the value is not present.
|
| reverse(...)
| L.reverse() -- reverse *IN PLACE*
|
| sort(...)
| L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
| cmp(x, y) -> -1, 0, 1
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __hash__ = None
|
| __new__ = <built-in method __new__ of type object at 0x1E1CF100>
| T.__new__(S, ...) -> a new object with type S, a subtype of T
如果對象(通常可能成爲一個模塊)有很多使用dir的方法或屬性,或者ipython的TAB完成可以得到複雜的跟蹤。
在這種情況下,我在下面的例子中使用的過濾器,如:
filter(lambda s: 'sin' in s.lower(), dir(numpy))
導致
['arcsin',
'arcsinh',
'csingle',
'isinf',
'isposinf',
'sin',
'sinc',
'single',
'singlecomplex',
'sinh']
我覺得非常方便,探索從我期望他們必須有不明物體一個方法(或屬性)應該作爲其名稱的一部分。
- 1. 如何檢查對象是否具有某些方法/屬性?
- 2. 如何顯示所有方法和數據,當對象不具有在python
- 3. 如何檢查Ruby對象的方法?
- 4. 如何在Symfony2中檢查對象是否有方法
- 5. 如何查看R中包的所有方法,對象,dataframse等?
- 6. 如何查看對象類中的所有方法/屬性
- 7. 如何檢查Python中的urllib2對象?
- 8. Python:如何檢查對象的屬性是否是方法?
- 9. 檢查Flash對象是否具有JavaScript內的方法
- 10. PHP:遍歷所有對象方法(調用對象中的所有方法)
- 11. 如何查看COM對象的所有方法/成員?
- 12. 如何查找JXA對象上的所有方法?
- 13. 在python中如何檢查一個對象是否有值?
- 14. 如何在ActionScript 3中列出對象的所有方法?
- 15. 如何在Javascript中檢查該對象可用的對象和方法
- 16. 如何檢查PHP對象是否具有PHP4中的屬性。
- 17. 在Objective C中檢查有效對象的方法?
- 18. 將所有東西都作爲Python中的對象的方法
- 19. 如何檢索XmlDocument對象中的所有XmlEntityReference對象?
- 20. 檢查表或所有的值對象
- 21. 如何檢查所有元組是否在Python列表中具有特定值
- 22. 如何檢查對象是否支持vba中的方法?
- 23. 如何檢查方法中通用對象的類型?
- 24. 如何使輔助方法檢查對象的存在狀態?
- 25. 檢查對象是否在Java中有方法?
- 26. 如何檢查具有相同標誌的對象的NSMutableArray?
- 27. 檢查對象具有特定屬性
- 28. lodash檢查對象屬性具有值
- 29. 檢查對象是否具有屬性
- 30. 如何列出Ruby中所有對象的方法?
至少你應該使用'if not(x。startswith('__')和x.endswith('__'))''因爲人們經常使用'__'前綴來表示私有成員。你只想刪除以'__'開頭和結尾的文件 – Tom 2009-12-13 23:24:51
我只是在這裏猜測,但我想亞歷克斯想知道* public *接口中有什麼。 – 2009-12-13 23:31:59
可能值得指出的是'dir()'不限於交互式提示符(您的語句可以以這種方式讀取,也可以以不熟悉的方式讀取) – 2009-12-13 23:36:38