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

BVM*_*iko 6 python

如果我有以下类,那么获取变量和方法的确切列表的最佳方法是什么,不包括超类中的变量和方法?

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

我希望元组('var1','var2','var3','meth1')具有最小的开销.这是在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__
{}
Run Code Online (Sandbox Code Playgroud)

bgp*_*ter 9

如果已知类及其超类,则类似于:

tuple(set(dir(Foo)) - set(dir(Bar)))
Run Code Online (Sandbox Code Playgroud)

如果您希望它更通用,您可以使用类似的东西获取基类列表

bases = Foo.mro()
Run Code Online (Sandbox Code Playgroud)

...然后使用该列表从所有基类中减去属性.


hig*_*dth 6

在您的示例中,a是一个实例,__dict__它将包括在其__init__函数中设置的所有变量。要获取所有类变量,请使用a.__class__.__dict__