获取Python中类的变量和方法列表

10 投票
5 回答
33874 浏览
提问于 2025-04-16 15:24

如果我有以下这个类,想要获取这个类里所有的变量和方法,不包括从父类继承来的,最好的方法是什么呢?

class Foo(Bar):
  var1 = 3.14159265
  var2 = Baz()
  @property
  def var3(self):
      return 42
  def meth1(self, var):
      return var

我想要一个元组 ('var1','var2','var3','meth1'),而且希望尽量减少开销。这个操作是在Django环境下进行的,Django似乎把一些类实例的变量放在了只读的 __dict__ 变量里;我找不到办法来复制这个效果。

在我尝试的过程中,我看到了一些情况,有没有其他建议,除了从 dir() 里去掉 __* 的部分,或者手动列出它们呢?

>>> a=Foo()
>>> a
<__main__.Foo instance at 0x7f48c1e835f0>
>>> dict(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: iteration over non-sequence
>>> dir(a)
['__doc__', '__module__', 'meth1', 'var1', 'var2', 'var3']
>>> a.__dict__
{}

5 个回答

3

第三个答案是 inspect模块,它的功能和上面提到的类似。

7

在你的例子中,a 是一个实例,它的 __dict__ 会包含在它的 __init__ 函数中设置的所有变量。如果你想获取所有的类变量,可以使用 a.__class__.__dict__

11

如果你知道一个类和它的父类,可以像这样做:

tuple(set(dir(Foo)) - set(dir(Bar)))

如果你想让它更通用一些,可以用类似的方式获取所有父类的列表:

bases = Foo.mro()

...然后用这个列表来减去所有父类的属性。

撰写回答