将方法与对象的变量区分开来

时间:2012-01-09 11:34:49

标签: python

给定一个对象myObject,我做

print dir(myObject)

这将转储变量和方法名称。我如何区分哪些是变量,哪些是方法?

2 个答案:

答案 0 :(得分:2)

您可以使用types.MethodType识别方法:

In [1]: class A:
   ...:     def __init__(self):
   ...:         self.x = 2
   ...:     def f(self):
   ...:         return 1

In [2]: a=A()

In [3]: import types

In [4]: isinstance(a.f, types.MethodType)
Out[4]: True

注意:静态方法的类型为types.FunctionType

更新:因此,要获取所有函数名称,您可以执行

In [5]: [name for name in dir(a) if isinstance(getattr(a, name), types.MethodType)]
Out[5]: ['__init__', 'f']

答案 1 :(得分:2)

@JanPöschko的回答是正确的,但不会捕获所有方法。根据用例,检查方法的最佳方法可能是好callable

>>> class Foo(object):
...     pass
>>> [member for member in dir(Foo()) if callable(getattr(Foo(), member))]
['__class__', '__delattr__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

这也捕获了类和静态方法。