Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get the list of a class's variables & methods in Python

Tags:

python

If I have the following class, what's the best way of getting the exact list of variables and methods, excluding those from the superclass?

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

I want the tuple ('var1','var2','var3','meth1') with minimum overhead. This is being run in a Django environment, which seems to be putting some of it's class instance variables in the read-only __dict__ variable; a feat which I can't find a way to replicate.

Here's what I'm seeing while playing with it, any suggestions beyond trimming out the __* from the dir() or manually listing them?

>>> 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__
{}
like image 965
BVMiko Avatar asked Apr 09 '11 19:04

BVMiko


1 Answers

If the class and its superclasses are known, something like:

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

If you want it to be more generic, you can get a list of the base classes using something like

bases = Foo.mro()

...and then use that list to subtract out attributes from all the base classes.

like image 129
bgporter Avatar answered Sep 28 '22 12:09

bgporter